在与谓词匹配的序列中查找第一个元素

我想要一种惯用的方式来找到与谓词匹配的列表中的第一个元素。


当前代码非常丑陋:


[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

但是,如果已经有内置的插件开始用这样的实用函数填充代码,那是很鸡肋的(人们可能不会注意到它们已经在那里,因此随着时间的推移它们会不断重复)。


慕侠2389804
浏览 380回答 3
3回答

慕容708150

next(x for x in seq if predicate(x))StopIteration如果没有,它将引发。next(ifilter(predicate, seq), None)None如果没有这样的元素,则返回。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python