我有两个列表,
l1 = [1,2,3,4,5,6]
l2 = [3,2]
我想要的是删除列表 l1 中 l2 中的元素,为此我做了类似的事情,
for x in l1:
if x in l2:
l1.remove(x)
它给出类似的输出
[1, 3, 4, 5, 6]
但是输出应该是这样的
[1, 4, 5, 6]
谁能阐明这一点。
最佳答案
这很容易解释。
考虑您拥有的第一个数组:
| 1 | 2 | 3 | 4 | 5 | 6 |
现在开始迭代
| 1 | 2 | 3 | 4 | 5 | 6 |
^
什么都没发生,迭代器递增
| 1 | 2 | 3 | 4 | 5 | 6 |
^
2 被移除
| 1 | 3 | 4 | 5 | 6 |
^
迭代器增量
| 1 | 3 | 4 | 5 | 6 |
^
瞧,3 还在那里。
解决方案是迭代向量的副本,例如
for x in l1[:]: <- slice on entire array
if x in l2:
l1.remove(x)
或反向迭代:
for x in reversed(l1):
if x in l2:
l1.remove(x)
它的作用是这样的:
| 1 | 2 | 3 | 4 | 5 | 6 |
^
| 1 | 2 | 3 | 4 | 5 | 6 |
^
| 1 | 2 | 4 | 5 | 6 |
^
| 1 | 2 | 4 | 5 | 6 |
^
| 1 | 4 | 5 | 6 |
^
| 1 | 4 | 5 | 6 |
^
关于python - 删除 Python 列表元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12840747/