2 つの順序なしリストに同じ要素が含まれているかどうかを判断する簡単 (かつ迅速) な方法を探しています。
例えば:
['one', 'two', 'three'] == ['one', 'two', 'three'] : true
['one', 'two', 'three'] == ['one', 'three', 'two'] : true
['one', 'two', 'three'] == ['one', 'two', 'three', 'three'] : false
['one', 'two', 'three'] == ['one', 'two', 'three', 'four'] : false
['one', 'two', 'three'] == ['one', 'two', 'four'] : false
['one', 'two', 'three'] == ['one'] : false
地図を使わずにこれを実行したいと考えています。
ベストアンサー1
Python には、 と呼ばれる、順序付けられていない (ハッシュ可能な) もののコレクションを表す組み込みデータ型がありますset
。両方のリストをセットに変換すると、比較は順序付けられなくなります。
set(x) == set(y)
編集: @mdwhatcott は、重複をチェックしたいと指摘しています。set
重複は無視されるため、各リストのアイテム数も追跡する同様のデータ構造が必要です。これは、マルチセット; 標準ライブラリにおける最良の近似値はcollections.Counter
:
>>> import collections
>>> compare = lambda x, y: collections.Counter(x) == collections.Counter(y)
>>>
>>> compare([1,2,3], [1,2,3,3])
False
>>> compare([1,2,3], [1,2,3])
True
>>> compare([1,2,3,3], [1,2,2,3])
False
>>>