2

次の2つのフィルター式が同じ結果を返すのはなぜですか?

A = [(1,(1,2,3))]
A1 = filter(lambda (a,b): b, A)
A2 = filter(lambda ab: ab, A)
A1 == A2
>>>> True
4

2 に答える 2

3

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
于 2013-02-16T07:13:57.573 に答える
2

バグではありません。 関数が-y値を filter返す要素を取ります。True

最初のケースでは、タプルをとして解凍し、2番目のタプル1(1,2,3)確認します((1,2,3))-それは本当(空ではない)なのでfilter、すべてを返します。

2番目のケースでは、タプルを確認します(1,(1,2,3))。それも空ではないので、すべてを再び返します。

于 2013-02-16T07:13:32.860 に答える