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

发布于 2021-01-29 15:08:43

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

当前代码非常丑陋:

[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

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

关注者
0
被浏览
86
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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

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

    或(itertools.ifilter在Python 2上):

    next(filter(predicate, seq))
    

    StopIteration如果没有,它将引发。


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

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

    要么:

    next(filter(predicate, seq), None)
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看