次の2つのフィルター式が同じ結果を返すのはなぜですか?
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)
参考までに、次の値はFalse
-ishの値ですが、他のすべての値はTrue
-ishです。
0
None
False
''
[]
()
# and all other empty containers
バグではありません。 関数が-y値を filter
返す要素を取ります。True
最初のケースでは、タプルをとして解凍し、2番目のタプル1
を(1,2,3)
確認します((1,2,3)
)-それは本当(空ではない)なのでfilter
、すべてを返します。
2番目のケースでは、タプルを確認します(1,(1,2,3))
。それも空ではないので、すべてを再び返します。