3 回答

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超4個(gè)贊
Python為此提供的性能函數(shù)是set.issubset。但是,它確實(shí)有一些限制,使其不清楚是否是您問題的答案。
列表可能包含多個(gè)項(xiàng)目并具有特定順序。一套沒有。為了實(shí)現(xiàn)高性能集,只能在可哈希對(duì)象上工作。
您是在詢問子集還是子序列(這意味著您需要一個(gè)字符串搜索算法)?在許多測(cè)試中,兩個(gè)列表中的兩個(gè)列表是否相同?列表中包含哪些數(shù)據(jù)類型?而且,這是否需要列出清單?
您的其他帖子與字典和列表相交,使類型更清晰,并且確實(shí)推薦使用字典鍵視圖來實(shí)現(xiàn)類似集合的功能。在那種情況下,之所以可以工作是因?yàn)樽值滏I的行為就像一個(gè)集合(以至于在我們使用Python進(jìn)行集合之前,我們都使用字典)。一個(gè)人想知道問題如何在三個(gè)小時(shí)內(nèi)變得不那么具體。

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超4個(gè)贊
>>> a = [1, 3, 5]
>>> b = [1, 3, 5, 8]
>>> c = [3, 5, 9]
>>> set(a) <= set(b)
True
>>> set(c) <= set(b)
False
>>> a = ['yes', 'no', 'hmm']
>>> b = ['yes', 'no', 'hmm', 'well']
>>> c = ['sorry', 'no', 'hmm']
>>>
>>> set(a) <= set(b)
True
>>> set(c) <= set(b)
False

TA貢獻(xiàn)1854條經(jīng)驗(yàn) 獲得超8個(gè)贊
假設(shè)項(xiàng)目是可哈希的
>>> from collections import Counter
>>> not Counter([1, 2]) - Counter([1])
False
>>> not Counter([1, 2]) - Counter([1, 2])
True
>>> not Counter([1, 2, 2]) - Counter([1, 2])
False
如果您不在乎重復(fù)的項(xiàng)目,例如 [1, 2, 2]并且[1, 2]然后只需使用:
>>> set([1, 2, 2]).issubset([1, 2])
True
在相交之后在較小列表上測(cè)試相等性是最快的方法嗎?
.issubset將是最快的方法。在測(cè)試之前檢查長(zhǎng)度issubset不會(huì)提高速度,因?yàn)槟匀挥蠴(N + M)個(gè)項(xiàng)目要進(jìn)行迭代和檢查。
添加回答
舉報(bào)