我是Python新手,並且對Lambda表達式變得非常感興趣。我遇到的問題是從具有lambda過濾器的元素列表中僅找到一個目標元素。理論上,當發現目標元素時,再沒有意義了。當預期的結果被發現時,可以在lambda中打破
隨着for loop
這是非常簡單的break
循環,但如何使用lambda
?是否可以做到這一點?我從谷歌搜索,但沒有找到預期的解決方案
我是Python新手,並且對Lambda表達式變得非常感興趣。我遇到的問題是從具有lambda過濾器的元素列表中僅找到一個目標元素。理論上,當發現目標元素時,再沒有意義了。當預期的結果被發現時,可以在lambda中打破
隨着for loop
這是非常簡單的break
循環,但如何使用lambda
?是否可以做到這一點?我從谷歌搜索,但沒有找到預期的解決方案
從https://docs.python.org/3/library/functions.html#filter
注意
filter(function, iterable)
相當於發電機 表達(item for item in iterable if function(item))
如果功能 不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
和lst
Plaszkota謝謝你的回答,但我仍然不明白你的意思是什麼「如果你只從這個發電機請求一個項目,你會得到你的功能」 – Rui
'filter '不會立即將'f'應用於列表中的每個元素。相反,它返回一個生成器,當你將它傳遞給'next'時,它只會將'f'應用於足夠的元素,以確定哪個元素給'next'返回。 – chepner
@chepner取決於你是否在python 3中 – Copperfield
只有lambda表達式不處理任何事情過去3
是沒有可能的,你需要使用filter
(python 2中的itertools.ifilter
)或條件生成表達式,並在該函數上調用next
g等出來的
例如第一要素,讓說你想的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
>>>
看看編輯如果在這裏最多的回答http://stackoverflow.com/questions/ 290424/filter-a-python-list-by-predicate –