3 回答

TA貢獻1815條經(jīng)驗 獲得超10個贊
Python有一個內(nèi)置的數(shù)據(jù)類型,用于存儲(可哈希)事物的無序集合,稱為set。如果將兩個列表都轉(zhuǎn)換為集合,則比較將無序。
set(x) == set(y)
有關(guān)文檔 set
編輯:@mdwhatcott指出您要檢查重復(fù)項。set忽略這些,因此您需要一個類似的數(shù)據(jù)結(jié)構(gòu),該結(jié)構(gòu)還可以跟蹤每個列表中的項目數(shù)。這稱為多集;標準庫中的最佳近似值為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
>>>

TA貢獻1810條經(jīng)驗 獲得超4個贊
如果元素總是像您的示例中那樣幾乎被排序,則內(nèi)建.sort()(timsort)應(yīng)該很快:
>>> a = [1,1,2]
>>> b = [1,2,2]
>>> a.sort()
>>> b.sort()
>>> a == b
False
如果您不想就地排序,可以使用sorted()。
在實踐中它可能永遠是那么快collections.Counter()(盡管漸進O(n)時間是更好,然后O(n*log(n))進行.sort())。測量它;如果重要的話。

TA貢獻1862條經(jīng)驗 獲得超7個贊
您想查看它們是否包含相同的元素,但是不在乎順序。
您可以使用一組:
>>> set(['one', 'two', 'three']) == set(['two', 'one', 'three'])
True
但是set對象本身僅包含每個唯一值的一個實例,并且不會保留順序。
>>> set(['one', 'one', 'one']) == set(['one'])
True
因此,如果跟蹤重復(fù)項/長度很重要,那么您可能還需要檢查長度:
def are_eq(a, b):
return set(a) == set(b) and len(a) == len(b)
添加回答
舉報