我有以下代码:
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;]
任何人都可以指出我的实施有什么问题,还是有另一种更好的解决方法?
答案 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)
也没关系。您可以使用集合来获取唯一元素。