最佳答案
我想要一种惯用的方法来查找匹配谓词的列表中的第一个元素。
当前的代码相当难看:
[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
但是,如果已经内置了提供相同功能的内置功能,那么开始用这样的实用函数填充代码是相当乏味的(人们可能不会注意到它们已经存在,所以它们往往会随着时间的推移而重复出现)。