2016-04-09 59 views
0

我有以下代碼:Python中,在多個列表找到唯一詞

a= ['hello','how','are','hello','you'] 
b= ['hello','how','you','today'] 
len_b=len(b) 

for word in a: 

     count=0 
     while count < len_b: 

      if word == b[count]:  
       a.remove(word) 
       break 

      else: 
       count=count+1 

print a 

的目標是,它基本上輸出(列表中的內容) - (B名單的內容) 所以想要的結果這種情況下將是一個= [「是」,「你好」]

但是當我運行我的代碼,我收到了= [「怎麼樣」,「是」,「你」]

任何人可以任意點我的實現出了什麼問題,還是有另一種更好的方法來解決這個問題?

+2

迭代時不要更改列表的長度。另外,除非訂單相關,否則您可以「打印設置(a) - 設置(b)'。 – jonrsharpe

回答

0

差別的原因是因爲你是變異的名單a在遍歷它來做set(a) - set(b)

如果你想正確解決它,你可以嘗試下面的方法。它使用列表解析和字典保持詞的結果集數的軌跡:

>>> a = ['hello','how','are','hello','you'] 
>>> b = ['hello','how','you','today'] 
>>> 
>>> cnt_a = {} 
>>> for w in a: 
...  cnt_a[w] = cnt_a.get(w, 0) + 1 
... 
>>> for w in b: 
...  if w in cnt_a: 
...   cnt_a[w] -= 1 
...   if cnt_a[w] == 0: 
...    del cnt_a[w] 
... 
>>> [y for k, v in cnt_a.items() for y in [k] * v] 
['hello', 'are'] 

它運作良好,在有重複的情況下,即使在結果列表中。但它可能不會保留訂單,但如果您願意,可以輕鬆修改以實現此目的。

+0

非常感謝您的幫助。順序對我來說並不重要 –

1

可以使用set來獲取所有非重複的元素

所以,你可以爲套

+0

這在一定程度上起作用,它給了我任何在a中出現的單詞,從不在b中,但是我仍然沒有得到我期待的結果,它給了我a = ['are']而不是a = [ 'are','hello'] –

0

set(a+b)也是可以的。你可以使用集合來獲得獨特的元素。

相關問題