問題

 >>> l = list(range(10))
>>> l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> if filter(lambda x: x > 10, l):
...     print "foo"
... else:                     # the list will be empty, so bar will be printed
...     print "bar"
... 
bar
 

我想使用 any() 代替,但any()只有一個引數:iterable.有沒有更好的方法?

  最佳答案

使用生成器表示式作為一個引數:

 any(x > 10 for x in l)
 

這裡的謂詞在生成器表示式的表達方面,但您可以在那裡使用任何表示式,包括使用函式。

演示:

 >>> l = range(10)
>>> any(x > 10 for x in l)
False
>>> l = range(20)
>>> any(x > 10 for x in l)
True
 

生成器表示式將被迭代到any()找到True結果,並且沒有進一步:

 >>> from itertools import count
>>> endless_counter = count()
>>> any(x > 10 for x in endless_counter)
True
>>> # endless_counter last yielded 11, the first value over 10:
...
>>> next(endless_counter)
12