次の2つのフィルター式が同じ結果を返すのはなぜですか?
A = [(1,(1,2,3))]
A1 = filter(lambda (a,b): b, A)
A2 = filter(lambda ab: ab, A)
A1 == A2
>>>> True
filterFalse関数に渡されたときに-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))。それも空ではないので、すべてを再び返します。