2つの順序なしリストが等しいかどうかを確認する [重複] 質問する

2つの順序なしリストが等しいかどうかを確認する [重複] 質問する

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)

ドキュメントset


編集: @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
>>> 

おすすめ記事