我是Python新手,只是对Lambda表达非常感兴趣。我遇到的问题是从带有lambda过滤器的元素列表中找到一个且只有一个目标元素。理论上,当找到目标元素时,再也没有意义继续下去了。
使用for loop
break
循环非常简单,但使用lambda
怎么办?毕竟有可能做到这一点吗?我从谷歌搜索,但未找到预期的解决方案
答案 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
>>>