Cách Pythonic để kiểm tra xem một điều kiện có giữ cho bất kỳ phần tử nào của danh sách hay không


110

Tôi có một danh sách bằng Python và tôi muốn kiểm tra xem có phần tử nào là âm không. Specman có has()phương thức cho các danh sách:

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

Trong trường hợp itlà 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 tài liệu Python và không thể tìm thấy bất kỳ điều 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á thiếu nhã nhặn. Có cách nào tốt hơn để làm điều này bằng Python không?

Câu trả lời:


186

bất kỳ () :

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

Ngoài ra, nếu bạn định sử dụng "True in ...", hãy biến nó thành biểu thức trình tạo để nó không chiếm bộ nhớ O (n):

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

1
Sửa chữa: Nếu bạn định sử dụng True in ..., hãy xem xét lại và sử dụng anythay thế.
Aran-Fey


10

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


Chỉ 2.5+. Nếu không, bạn phải tạo một hàm, có thể sử dụng ifilter và các ngoại lệ, hoặc bool (set ((x for x if cond))) hoặc tương tự.
Gregg Lind

1
Thay vì một ifilter thingie phức tạp, chỉ cần làm: def any (it): for el in it: if el: return True; trở False
Rory
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.