Python,在多个列表中查找唯一的单词

时间:2016-04-09 21:43:19

标签: python string list loops sorting

我有以下代码:

 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  

目标是它基本上输出(列表a的内容) - (列表b的内容) 所以在这种情况下想要的结果是a = [&#39;是&#39;,&#39;你好&#39;]

但是当我运行我的代码时,我会得到一个= [&#39;&#39;&#39;&#39;&#39;&#39;你&#39;]

任何人都可以指出我的实施有什么问题,还是有另一种更好的解决方法?

3 个答案:

答案 0 :(得分:1)

您可以使用set获取所有非重复元素

所以你可以set(a) - set(b)来获得集合的差异

答案 1 :(得分:0)

这样做的原因是因为您在迭代它时正在改变列表a

如果要正确解决,可以尝试以下方法。它使用列表推导和字典来跟踪结果集中的单词数:

>>> 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']

即使在结果列表中,也存在重复的情况。但是,它可能无法保留订单,但如果您愿意,可以轻松修改它。

答案 2 :(得分:0)

set(a+b)也没关系。您可以使用集合来获取唯一元素。