Python列表1删除列表2中的元素

Python列表1删除列表2中的元素,python,Python,我有一个python脚本,其中包含从列表1中删除元素(如果它们存在于列表2中)。看起来很简单。这就是我所做的: arr1 = [1,2,3,4,5,6,7] arr2 = [3,7,2,1,4,6] for i in arr1: print i if i in arr2: arr1.remove(i) print arr1 预期输出5 收到了这个 1 [2, 3, 4, 5, 6, 7] 3 [2, 4, 5, 6, 7] 5 6 [2, 4, 5,

我有一个python脚本,其中包含从列表1中删除元素(如果它们存在于列表2中)。看起来很简单。这就是我所做的:

arr1 = [1,2,3,4,5,6,7]
arr2 = [3,7,2,1,4,6]
for i in arr1:
    print i
    if i in arr2:
       arr1.remove(i)
       print arr1
预期输出
5

收到了这个

1
[2, 3, 4, 5, 6, 7]
3
[2, 4, 5, 6, 7]
5
6
[2, 4, 5, 7]  # final output
即使在每次迭代中打印i之后,我也不明白为什么它首先跳过了2。但是当我重复这个循环3次时,我得到了预期的输出

arr1 = [1,2,3,4,5,6,7]
arr2 = [3,7,2,1,4,6]
for i in arr1:
    print i
    if i in arr2:
       arr1.remove(i)
       print arr1
for i in arr1:
    print i
    if i in arr2:
       arr1.remove(i)
       print arr1
for i in arr1:
    print i
    if i in arr2:
       arr1.remove(i)
       print arr1 
输出

1
[2, 3, 4, 5, 6, 7]
3
[2, 4, 5, 6, 7]
5
6
[2, 4, 5, 7] 
2
[4, 5, 7]
5
7
[4, 5]
4
[5]
这给了我
5
作为最终迭代的输出。有人能告诉我这是怎么回事吗。为什么它没有首先删除所有元素,为什么我需要运行它们3次

编辑 虽然列表理解有效:

arr1[:] = [x for x in arr1 if x not in arr2]  
但是为什么我的第一个代码不起作用呢。它与列表理解在arr2中为i执行的操作相同: 对于arr1中的j: 如果我在arr1中: arr1.删除(i)
打印(arr1)

只是想弄清楚您的列表是否有重复的元素。如果是,则说明您要执行的操作。删除全部或一个?我在这里寻找一个更通用的解决方案。我问的是为什么要进行3次迭代,而不是如何进行。虽然我是用列表理解的方式做的,而且很管用,但是为什么传统的方式不管用呢way@Gahan它没有重复的元素。虽然list2的元素数量与list1几乎相同,但我只想从list1中删除list2中存在的元素。列表理解有效
arr1[:]=[x代表arr1中的x,如果x不在arr2]
但是为什么您评论的传统工作列表理解方法不是创建新列表而不是从现有列表中删除,所以您建议我应该创建一个新列表并附加到现有列表中,而不是从现有列表中删除元素