小编典典

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

all

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

当前的代码非常难看:

[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

但是,如果有内置函数已经提供了相同的功能,那么开始用这样的实用函数填充代码是非常无味的(人们可能不会注意到它们已经存在,因此它们往往会随着时间的推移而重复)。


阅读 67

收藏
2022-05-27

共1个答案

小编典典

seq要查找与 a匹配的序列中的第一个元素predicate

next(x for x in seq if predicate(x))

或者简单地说:

蟒蛇2

next(itertools.ifilter(predicate, seq))

蟒蛇 3

next(filter(predicate, seq))

StopIteration如果谓词与任何元素都不匹配,这些将引发异常。


None如果没有这样的元素,则返回:

next((x for x in seq if predicate(x)), None)

或者:

next(filter(predicate, seq), None)
2022-05-27