我想做类似的事情:
>>> lst = [1, 2, 3, 4, 5] >>> lst.find(lambda x: x % 2 == 0) 2 >>> lst.findall(lambda x: x % 2 == 0) [2, 4]
Python的标准库中是否有类似行为?
我知道在这里自己动手很容易,但是我正在寻找一种更标准的方法。
您可以使用filter方法:
>>> lst = [1, 2, 3, 4, 5] >>> filter(lambda x: x % 2 == 0, lst) [2, 4]
或列表理解:
>>> lst = [1, 2, 3, 4, 5] >>> [x for x in lst if x %2 == 0] [2, 4]
要查找单个元素,可以尝试:
>>> next(x for x in lst if x % 2 == 0) 2
尽管如果没有匹配项将引发异常,因此您可能希望将其包装在try / catch中。方括号()使之成为生成器表达式,而不是列表理解。
就我个人而言,尽管我只是使用常规的过滤器/理解并采用第一个元素(如果有)。
如果什么也没找到,就会引发异常
filter(lambda x: x % 2 == 0, lst)[0] [x for x in lst if x %2 == 0][0]
这些返回空列表
filter(lambda x: x % 2 == 0, lst)[:1] [x for x in lst if x %2 == 0][:1]