第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

檢查兩個無序列表是否相等

檢查兩個無序列表是否相等

慕容3067478 2019-11-07 12:58:22
我正在尋找一種簡單(快速)的方法來確定兩個無序列表是否包含相同的元素:例如:['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我希望不使用地圖就可以做到這一點。
查看完整描述

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

>>> 


查看完整回答
反對 回復(fù) 2019-11-07
?
慕萊塢森

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())。測量它;如果重要的話。


查看完整回答
反對 回復(fù) 2019-11-07
?
牧羊人nacy

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)


查看完整回答
反對 回復(fù) 2019-11-07
  • 3 回答
  • 0 關(guān)注
  • 499 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號