【发布时间】:2012-01-21 23:38:33
【问题描述】:
我想要一种惯用的方法来查找列表中与谓词匹配的第一个元素。
目前的代码相当难看:
[x for x in seq if predicate(x)][0]
我考虑过改成:
from itertools import dropwhile
dropwhile(lambda x: not predicate(x), seq).next()
但必须有更优雅的东西......如果它返回一个 None 值而不是在找不到匹配项时引发异常,那就太好了。
我知道我可以定义如下函数:
def get_first(predicate, seq):
for i in seq:
if predicate(i): return i
return None
但是,如果有内置函数已经提供了相同的功能,那么开始用这样的实用函数填充代码是非常无味的(人们可能不会注意到它们已经存在,因此它们往往会随着时间的推移而重复) .
【问题讨论】:
-
除了比“python sequence find function”问得晚之外,这个问题还有一个更好的标题。