2010-04-06 56 views

回答

27

取決於你的意思是「包含」。也許這:

if set(a) <= set(b): 
    print "a is in b" 
+0

簡單工作。我將檢查'set'的用法。謝謝。 – Young 2010-04-06 06:04:56

+0

似乎功能上與我的解決方案相同 - 任何人都知道任何一方是否具有性能優勢? – Etaoin 2010-04-06 06:06:47

+0

不知道我買了那個 - 對'sub'的調用是線性的,但是<='不能自由。我錯過了什麼嗎? – Etaoin 2010-04-06 06:41:29

10

假設你想看看的sublist所有元素也一superlist元素:

all(x in superlist for x in sublist)

2

的解決方案取決於你從你的列表中期望的值。

如果有一個值的重複的方法可行,你需要檢查是否有在測試容器足夠的值,然後在這裏是一個時間低效的解決方案:

def contained(candidate, container): 
    temp = container[:] 
    try: 
     for v in candidate: 
      temp.remove(v) 
     return True 
    except ValueError: 
     return False 

測試此功能用:

>>> a = [1,1,2,3] 
>>> b = [1,2,3,4,5] 
>>> contained(a,b) 
False  
>>> a = [1,2,3] 
>>> contained(a,b) 
True 
>>> a = [1,1,2,4,4] 
>>> b = [1,1,2,2,2,3,4,4,5] 
>>> contained(a,b) 
True 
當然這溶液可以極大地改善的

:list.remove()是潛在的耗時,並且可以使用聰明排序和索引來避免。但我看不出如何避免此一循環......

(反正,任何其他解決方案將使用集或列表的內涵,這是使用內部循環來實現的...)

+0

遲了但令人印象深刻。感謝您的澄清。 – Young 2010-04-06 10:51:03

相關問題