myList = [4, 4, 9, 12]
if not any(isPrime(x) for x in myList):
print("The list did not contain a prime")
Python cũng có all()
mà quây qua bất kỳ chuỗi nào và trả về True
nếu tất cả các yếu tố đánh giá đúng.
any()
và all()
cả hai đều có đánh giá ngắn mạch: nếu any()
tìm thấy bất kỳ yếu tố nào đánh giá đúng, nó dừng và trả về True
; và nếu all()
tìm thấy bất kỳ yếu tố nào đánh giá sai, nó sẽ dừng và trả lại False
.
Cả hai đều "lười" ở chỗ chúng sử dụng lặp lại Python để kéo từng giá trị một. Ví dụ:
import random
def rand_sequence(n_max):
while True:
next_random = random.randint(0, n_max)
print(next_random)
yield next_random
all(isPrime(x) for x in rand_sequence(20))
Điều này sẽ lặp lại cho đến khi tìm thấy số nguyên tố, sau đó trả lại False
. Nó in các con số như là một tác dụng phụ để bạn có thể xem nó hoạt động. Tôi vừa thử điều này và có:
17
3
0
P.S. Tôi đã đi đến một cuộc nói chuyện tại một hội nghị Python, và người nói nói rằng ông thường sử dụng any()
như một cách rất hiệu quả để làm một vòng lặp. Một vòng lặp for
liên kết lại biến vòng lặp cho mỗi vòng lặp, nhưng any()
không làm điều đó; nó chỉ giữ giá trị kiểm tra. Vì vậy, nếu bạn sử dụng any()
với hàm luôn trả về None
hoặc giá trị sai, nó sẽ lặp lại theo cách của nó đến cuối chuỗi và theo anh chàng đó, đó là cách nhanh nhất trong Python để thực hiện. (Và nếu hàm của bạn trả về một giá trị không phải là None
và không sai, bạn có thể sử dụng all()
cho cùng một thủ thuật. . giá trị Nhưng bạn có thể buộc nó phải luôn luôn làm việc:
any(my_function(x) and False for x in sequence)
PPS Hãy sử dụng all()
để viết lại isPrime()
tôi sẽ thay đổi tên để is_prime()
để phù hợp với PEP 8. http://www.python.org/dev/peps/pep-0008/
def is_prime(element):
""" just a helper function! don't get religious about it! """
if element == 2:
return True
elif element <= 1 or element % 2 == 0:
return False
else:
return all(element % i for i in xrange(3, element, 2))
! Bạn có thể muốn kiểm tra 'element == 2' trước' element% 2 == 0'; cái sau luôn đúng khi cái cũ là đúng. – icktoofay
Cảm ơn, tôi đã sửa nó. Nhưng đó chỉ là một ví dụ để tạo ra một kịch bản mà nó có thể được sử dụng. –