我希望找到一种习惯用法来查找与谓词相匹配的列表中的第一个元素。
当前的代码相当丑陋:
[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
如果已经有内置函数可以提供同样的功能,那么像这样在代码中添加公用函数就显得有些无味(人们可能不会注意到它们已经存在,因此随着时间的推移它们往往会被重复)。