2016-09-02 69 views
4

我是Python新手,並且對Lambda表達式變得非常感興趣。我遇到的問題是從具有lambda過濾器的元素列表中僅找到一個目標元素。理論上,當發現目標元素時,再沒有意義了。當預期的結果被發現時,可以在lambda中打破

隨着for loop這是非常簡單的break循環,但如何使用lambda?是否可以做到這一點?我從谷歌搜索,但沒有找到預期的解決方案

+1

看看編輯如果在這裏最多的回答http://stackoverflow.com/questions/ 290424/filter-a-python-list-by-predicate –

回答

2

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))) 

將輸出3lst

+0

Plaszkota謝謝你的回答,但我仍然不明白你的意思是什麼「如果你只從這個發電機請求一個項目,你會得到你的功能」 – Rui

+0

'filter '不會立即將'f'應用於列表中的每個元素。相反,它返回一個生成器,當你將它傳遞給'next'時,它只會將'f'應用於足夠的元素,以確定哪個元素給'next'返回。 – chepner

+0

@chepner取決於你是否在python 3中 – Copperfield

0

只有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 
>>>  
相關問題