這是我的系統中的python實現中的錯誤?我在Ubuntu 12.04上運行Python 2.7.3。Python篩選器無法按預期工作?
A = [(1,(1,2,3))]
A1 = filter(lambda (a,b): b, A)
A2 = filter(lambda ab: ab, A)
A1 == A2
>>>> True
這是我的系統中的python實現中的錯誤?我在Ubuntu 12.04上運行Python 2.7.3。Python篩選器無法按預期工作?
A = [(1,(1,2,3))]
A1 = filter(lambda (a,b): b, A)
A2 = filter(lambda ab: ab, A)
A1 == A2
>>>> True
filter
過濾掉傳入函數時返回一個False
-ish值的參數。 (1, 2, 3)
和(1, (1, 2, 3))
在布爾上下文中返回True
,因此保留在返回的列表中。
您想改爲map
。
A1 = map(lambda (a,b): b, A)
A2 = map(lambda ab: ab, A)
僅供參考,follwing值False
-ish值,而其他一切都是True
-ish:
0
None
False
''
[]
()
# and all other empty containers
我知道我錯過了一些絕對微不足道的東西。我完全困惑'過濾器'的地圖!多麼浪費一個問題。謝謝。 – erjoalgo 2013-02-16 07:19:08
這不是一個錯誤。 filter
將元素返回給您的函數返回True
-y值。
在第一種情況下,你把它解析爲1
和(1,2,3)
你看看第二個((1,2,3)
) - 這是真的(非空),所以filter
返回了整個事情。
在第二種情況下,您看看元組(1,(1,2,3))
。這也不是空的,所以它會再次返回整個事物。
什麼辦法? '(1,(1,2,3))'和'(1,2,3)'都爲真。 – 2013-02-16 07:13:09
我不確定你的意思。 1和2都是'True',但1 == 2是False。另外,這兩個值都不是'True' – erjoalgo 2013-02-16 07:17:14
您是否真的在Python文檔中查找過濾器?引用公主新娘,「你一直用這個詞,我認爲這不代表你的想法。」 – 2013-02-16 07:19:49