当找到预期结果时,是否可以在lambda中断

时间:2016-09-02 11:31:28

标签: python loops lambda

我是Python新手,只是对Lambda表达非常感兴趣。我遇到的问题是从带有lambda过滤器的元素列表中找到一个且只有一个目标元素。理论上,当找到目标元素时,再也没有意义继续下去了。

使用for loop break循环非常简单,但使用lambda怎么办?毕竟有可能做到这一点吗?我从谷歌搜索,但未找到预期的解决方案

2 个答案:

答案 0 :(得分:2)

来自https://docs.python.org/3/library/functions.html#filter

  

请注意,filter(function, iterable)等同于生成器   表达式(item for item in iterable if function(item)) if function   如果函数是,则不是None(item for item in iterable if item)   None

因此在实践中,除非您开始从中获取元素,否则您的lambda将不会应用于整个列表。因此,如果您只从此生成器请求一个项目,您将获得您的功能。

@edit:

要请求一个对象,您可以拨打next(gen)

lst = [1,2,3,4,5]
print(next(filter(lambda x: x%3==0, lst)))

输出3并且不会在3

中处理lst之后的任何内容

答案 1 :(得分:0)

只使用lambdas是不可能的,你需要使用filter(python 2中的itertools.ifilter)或条件生成表达式,并在那个上调用next来获取第一个元素从它出来

例如,假设您想要列表中的5的倍数

>>> test=[1,2,3,6,58,78,50,65,36,79,100]
>>> next( filter(lambda x:x%5==0,test) )
50
>>> next( x for x in test if x%5==0 )
50
>>>