【发布时间】:2017-05-17 20:06:13
【问题描述】:
嗨,假设我在 python 中有两个列表,我想从两个列表中删除公共值。一个潜在的解决方案是:
x = [1, 2, 3, 4, 5, 6, 7, 8]
y = [43, 3123, 543, 76, 879, 32, 14241, 342, 2, 3, 4]
for i in x:
if i in y:
x.remove(i)
y.remove(i)
这似乎是正确的,但事实并非如此。我想,原因是通过从列表中删除一个项目,索引会继续迭代。因此,对于列表中的两个常见值,如果它们的值彼此接近,我们将丢失后面的值(代码不会遍历它)。 结果是:
>>> x
[1, 3, 5, 6, 8, 9, 10]
>>> y
[43, 3123, 543, 76, 879, 32, 14241, 342, 3]
所以我们缺少值'3'。
这种行为的原因是我提到的原因吗?还是我做错了什么?
【问题讨论】:
-
是的,这正是您在迭代对象时修改对象会遇到的问题。
-
强烈建议不要修改您正在迭代的值。对于任何试图理解你的代码在做什么的人来说,这可能会让你很难确定循环的流程。在这种情况下,通常建议对列表(或其他可迭代对象)的单独副本进行修改或迭代索引以切入列表:
for i in range(len(x)): print(x[i])
标签: python python-2.7 list