2015-04-12 45 views
1

目前去除值的一个实例,我想删除,如果它在两个列表中存在被引导通过循环的值,因为这样的:Python的 - 在两个列表

for value in Word1: 
    if value in Word2: 
     Word1.remove(value) 
     Word2.remove(value) 

然而,这个代码是返回['a', 'b', 'b']为Word1:['a', 'a', 'a', 'b', 'b', 'b']和Word2:['a', 'a', 'b', 'b']当我期望它返回['a', 'b']。什么导致这个问题? Pythontutor的可视化似乎没有帮助我。

+0

在遍历他们你正在改变列表的长度 - 这是一个非常糟糕的举动。请注意,使用'set'方法会显着简化这一点。 – jonrsharpe

回答

0

在迭代它时,您不能更改列表。 首先,确定元素,要删除,然后删除它们:

to_be_removed = set(Word1).intersection(Word2) 
Word1 = [w for w in Word1 if w not in to_be_removed] 
Word2 = [w for w in Word2 if w not in to_be_removed]