リスト内包表記におけるセットの Python add() 関数

リスト内包表記におけるセットの Python add() 関数

リストから重複を削除する以下のコードを見つけました:

seen = set(); print [i for i in list if i not in seen and not seen.add(i)]  

正確には何が理解できなかったのかそして見られない。add(i)「この部分のコードは次のように動作しますヘルプ(set.add)以下のように説明します。

add(...)
    Add an element to a set.
    This has no effect if the element is already present.

理解を深めるためにご協力をお待ちしております

答え1

リストの内包表記は、元のリスト/入力リストの値を反復処理します。値がまだ見つかっていない場合にのみ、新しいリスト/出力リストに値を追加する必要がありますif i not in seen。これが条件式 です。新しい値が新しいリスト/出力リストに追加されると、セットをseen更新する必要があるため、seen.add(i)関数呼び出し です。ただし、set.add()メソッドは を返しNone、これは と評価されますFalse。したがって、not演算子 が追加され、not seen.add(i)常に が返されますTrue

関連情報