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的標準庫?
我知道這裏非常容易推出自己的產品,但我正在尋找更爲標準的方法。
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的標準庫?
我知道這裏非常容易推出自己的產品,但我正在尋找更爲標準的方法。
您可以使用過濾器的方法:
>>> 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]
謝謝!這是爲了findall。怎麼樣找到? – 2008-11-14 15:39:22