删除Python列表元素(Remove Python list element)
我有两个名单,
l1 = [1,2,3,4,5,6] l2 = [3,2]我想要的是去除l2中列表l1的元素,因为我做了这样的事情,
for x in l1: if x in l2: l1.remove(x)它会给出类似的输出
[1, 3, 4, 5, 6]但输出应该是这样的
[1, 4, 5, 6]任何一个人都可以从中看到这一点。
I have two list,
l1 = [1,2,3,4,5,6] l2 = [3,2]what i want is to remove the element of list l1 which is in l2, for that i have done something like this,
for x in l1: if x in l2: l1.remove(x)it gives output like
[1, 3, 4, 5, 6]but the output should be like
[1, 4, 5, 6]can any one shed light on this.
最满意答案
这很容易解释。
考虑你有的第一个数组:
| 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 | ^This is easily explained like this.
consider the first array you have:
| 1 | 2 | 3 | 4 | 5 | 6 |Now you start iterating
| 1 | 2 | 3 | 4 | 5 | 6 | ^Nothing happens, iterator increments
| 1 | 2 | 3 | 4 | 5 | 6 | ^2 gets removed
| 1 | 3 | 4 | 5 | 6 | ^iterator increments
| 1 | 3 | 4 | 5 | 6 | ^And voila, 3 is still there.
The solution is to iterate ove a copy of the vector e.g.
for x in l1[:]: <- slice on entire array if x in l2: l1.remove(x)or to iterate in reverse:
for x in reversed(l1): if x in l2: l1.remove(x)Which acts like this:
| 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 | ^更多推荐
发布评论