Pythonリスト内包表記で副作用を使用することは良い習慣ではないことを私は知っています。しかし、なぜ次のようなことが起こるのか理解できません。
In [66]: tmp = [1,2,3,4,5]; [tmp.remove(elem) for elem in tmp]
Out[66]: [None, None, None]
In [67]: tmp
Out[67]: [2, 4]
これが良い習慣であるかどうかにかかわらず、リスト内包表記の内部は予測可能な何かをするべきではありませんか?上記が予測可能である場合、なぜ3つの操作しかremove
発生しなかったのか、そしてなぜ偶数のエントリが残っているのかを誰かが説明できますか?