2013-02-16 46 views
1

這是我的系統中的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 
+0

什麼辦法? '(1,(1,2,3))'和'(1,2,3)'都爲真。 – 2013-02-16 07:13:09

+0

我不確定你的意思。 1和2都是'True',但1 == 2是False。另外,這兩個值都不是'True' – erjoalgo 2013-02-16 07:17:14

+0

您是否真的在Python文檔中查找過濾器?引用公主新娘,「你一直用這個詞,我認爲這不代表你的想法。」 – 2013-02-16 07:19:49

回答

2

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 
+0

我知道我錯過了一些絕對微不足道的東西。我完全困惑'過濾器'的地圖!多麼浪費一個問題。謝謝。 – erjoalgo 2013-02-16 07:19:08

1

這不是一個錯誤。 filter將元素返回給您的函數返回True -y值。

在第一種情況下,你把它解析爲1(1,2,3)你看看第二個((1,2,3)) - 這是真的(非空),所以filter返回了整個事情。

在第二種情況下,您看看元組(1,(1,2,3))。這也不是空的,所以它會再次返回整個事物。