リストから重複を削除する以下のコードを見つけました:
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
。