2rs*_*2ts 17 python functional-programming filterfunction any python-2.7
>>> 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
Run Code Online (Sandbox Code Playgroud)
我想用any()它代替,但any()只需要一个参数:iterable.有没有更好的办法?
Mar*_*ers 30
使用生成器表达式作为一个参数:
any(x > 10 for x in l)
Run Code Online (Sandbox Code Playgroud)
这里谓词位于生成器表达式的表达式侧,但您可以使用任何表达式,包括使用函数.
演示:
>>> l = range(10)
>>> any(x > 10 for x in l)
False
>>> l = range(20)
>>> any(x > 10 for x in l)
True
Run Code Online (Sandbox Code Playgroud)
将迭代生成器表达式,直到 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
Run Code Online (Sandbox Code Playgroud)
在以下内部使用生成器表达式any():
pred = lambda x: x > 10
if any(pred(i) for i in l):
print "foo"
else:
print "bar"
Run Code Online (Sandbox Code Playgroud)
这假设您已经有一些想要使用的谓词函数,当然如果它是这样简单的东西你可以直接使用布尔表达式:any(i > 10 for i in l).
| 归档时间: |
|
| 查看次数: |
3723 次 |
| 最近记录: |