2008-11-14 37 views
29

Python列表我想要做的事,如:過濾通過謂語

>>> lst = [1, 2, 3, 4, 5] 
>>> lst.find(lambda x: x % 2 == 0) 
2 
>>> lst.findall(lambda x: x % 2 == 0) 
[2, 4] 

有什麼接近這樣的行爲在Python的標準庫?

我知道這裏非常容易推出自己的產品,但我正在尋找更爲標準的方法。

回答

46

您可以使用過濾器的方法:


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

編輯:爲查找(單件),你可以嘗試:


>>> (x for x in lst if x % 2 == 0).next() 
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] 
+1

謝謝!這是爲了findall。怎麼樣找到? – 2008-11-14 15:39:22