使用groupby:あなたは、例えば、値が最初に元のリストに登場する順序を気にしない場合
>>> from itertools import groupby
>>> a = [1, 2, 3, 3, 5, 9, 6, 2, 8, 5, 2, 3, 5, 7, 3, 5, 8]
>>> [k for k, _ in groupby(sorted(a, key=lambda x: a.index(x)))]
[1, 2, 3, 5, 9, 6, 8, 7]
は、キー引数を省略
>>> [k for k, _ in groupby(sorted(a))]
[1, 2, 3, 5, 6, 7, 8, 9]
groupby
でいくつかクールなことができます。
>>> [k for k, v in groupby(sorted(a)) if len(list(v)) > 1]
[2, 3, 5, 8]
または周波数辞書を構築する:複数回表示される項目を識別するために、
>>> {k: len(list(v)) for k, v in groupby(sorted(a))}
{1: 1, 2: 3, 3: 4, 5: 4, 6: 1, 7: 1, 8: 2, 9: 1}
itertoolsモジュール内のいくつかの非常に便利な機能があります:chain
、tee
とproduct
は少数に名前を付けるには、 !
「bがnot in bである」を実行する瞬間に 'b'が空であるため、リスト内包はメモリ内で行われ、結果は最後に「b」に割り当てられます。 –
[アルゴリズム - リスト内の重複した要素を効率的に削除するには?](http://stackoverflow.com/questions/1801459/algorithm-how-to-delete-duplicate-elements-in-a-list-efficiently ) –
つまり、リストの理解はループのようには機能しません。 – Alinwndrld