我想要一种惯用的方法来查找列表中与谓词匹配的第一个元素.
目前的代码非常难看:
[x for x in seq if predicate(x)][0]
Run Code Online (Sandbox Code Playgroud)
我想过把它改成:
from itertools import dropwhile
dropwhile(lambda x: not predicate(x), seq).next()
Run Code Online (Sandbox Code Playgroud)
但是必须有一些更优雅的东西...... None如果没有找到匹配,如果它返回一个值而不是引发异常会很好.
我知道我可以定义一个函数:
def get_first(predicate, seq):
for i in seq:
if predicate(i): return i
return None
Run Code Online (Sandbox Code Playgroud)
但是开始使用像这样的实用程序函数来填充代码是非常无味的(并且人们可能不会注意到它们已经存在,所以如果存在已经提供相同的内置函数,它们往往会随着时间的推移而重复).