2009-08-27 25 views
67

Tôi có một danh sách bằng Python và tôi muốn kiểm tra xem có yếu tố nào là số âm hay không. Specman có phương pháp has() cho các danh sách mà làm:Cách thức kiểm tra Pythonic nếu một điều kiện giữ cho bất kỳ thành phần nào của danh sách

x: list of uint; 
if (x.has(it < 0)) { 
    // do something 
}; 

đâu it là một từ khóa Specman ánh xạ tới mỗi phần tử của danh sách lần lượt.

Tôi thấy điều này khá thanh lịch. Tôi đã xem qua số Python documentation và không thể tìm thấy bất kỳ thứ gì tương tự. Điều tốt nhất tôi có thể nghĩ ra là:

if (True in [t < 0 for t in x]): 
    # do something 

Tôi thấy điều này khá không phù hợp. Có cách nào tốt hơn để làm điều này trong Python?

Trả lời

118

any():

if any(t < 0 for t in x): 
    # do something 

Ngoài ra, nếu bạn đang đi để sử dụng "True trong ...", làm cho nó một biểu thức máy phát điện vì vậy nó không mất O (n) bộ nhớ:

if True in (t < 0 for t in x): 
22

Sử dụng any().

if any(t < 0 for t in x): 
    # do something 
9

Python có chức năng any() được xây dựng cho chính xác mục đích này.

+0

2,5+ chỉ. Nếu không, bạn phải tạo một hàm, có thể sử dụng ifilter và exceptions, hoặc bool (set ((x cho x if cond))) hoặc tương tự. –

+1

Thay vì một thingie phức tạp, chỉ cần làm: def bất kỳ (nó): cho el trong nó: nếu el: return True; return false – Rory

Các vấn đề liên quan