2011-12-27 33 views
15

Cách Python độc đáo để kiểm tra xem tất cả các phần tử trong bộ sưu tập có thỏa mãn điều kiện không? (Các .NET All() method đầy ngách này độc đáo trong C#.)Python tương đương với LINQ Tất cả chức năng?

Có phương pháp lặp rõ ràng:

all_match = True 
for x in stuff: 
    if not test(x): 
     all_match = False 
     break 

Và một danh sách hiểu biết có thể làm các trick, nhưng dường như lãng phí:

all_match = len([ False for x in stuff if not test(x) ]) > 0 

Có ấy có là một thứ gì đó thanh lịch hơn ... Tôi đang thiếu gì?

+0

Xem thêm http://stackoverflow.com/questions/8641008/compare-multiple-variables-to-the-same-value-in-if-in-python –

Trả lời

25
all_match = all(test(x) for x in stuff) 

Ngắn mạch này và không yêu cầu công cụ phải là danh sách - mọi thứ có thể lặp lại sẽ hoạt động - vì vậy có một số tính năng tuyệt vời.

Ngoài ra còn có các giống

any_match = any(test(x) for x in stuff) 
+2

Hah! Quá rõ ràng! Tốt đau buồn, tôi cảm thấy ngớ ngẩn bây giờ ... – Cameron

+0

Chắc chắn cách tôi đi. Tuy nhiên, 'tất cả' trong Python khác với' Enumerable.All' ở chỗ nó không trực tiếp lấy một vị từ. (Vì vậy, nó giống như 'Enumerable.Where (predicate) .All()'.) –

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