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

参见英文答案 > Sequence find function in Python                                    4个
我想要一种惯用的方法来查找列表中与谓词匹配的第一个元素.

目前的代码非常难看:

[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

但是开始使用像这样的实用程序函数来填充代码是非常无味的(并且人们可能不会注意到它们已经存在,所以如果有已经提供相同的内置函数,它们往往会重复).

解决方法:

next(如果谓词(x),则x为seq中的x)

如果没有,它会引发StopIteration.

next(ifilter(谓词,seq),无)

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

上一篇:andThenDemo 和Predicate的函数式


下一篇:Java使用仿函数连接集合