Python 删除另一个数组中包含的元素

Python 删除另一个数组中包含的元素,python,python-3.x,Python,Python 3.x,我有两个python数组。我想删除第一个数组中存在的所有元素。以下是阵列示例: array1 =[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] array2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 2, 4, 6, 8, 10, 3, 6, 9, 4, 8, 5, 10, 6, 7, 8, 9, 10, 11] 结果将是: array2=[] 以下是我所做的: for x in array1: for y in array2:

我有两个python数组。我想删除第一个数组中存在的所有元素。以下是阵列示例:

array1 =[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
array2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 2, 4, 6, 8, 10, 3, 6, 9, 4, 8, 5, 10, 6, 7, 8, 9, 10, 11]
结果将是:

array2=[]

以下是我所做的:

for x in array1:
    for y in array2:
        if x==y:
            array2.remove(x)

print (array2)

但我看到了结果。为什么?如何解决这个问题?

过滤的\u-arr=[i为数组中的i,如果我不在数组中1]

过滤的\u-arr=[i为数组中的i,如果我不在数组中1]

我猜问题与你如何循环和删除列表中的项目有关,使程序跳过第三个10

您可以使用快速列表理解来解决问题:

array3 = [i for i in array2 if i not in array1]
这基本上是一种更简单的键入方式:

array3 = []
for i in array2:
    if i not in array1:
        array3.append(i)
此外,您可能不想使用集合。例如:

array1 = [1, 2, 3]
array2 = [1, 2, 3, 3, 4, 4, 5, 6]

array3 = list(set(array2) - set(array1))

array3将只包含[4,5,6],而不是[4,4,5,6],因为集合不能包含重复项。

我猜问题与如何循环和删除列表中的项有关,使程序跳过第三个10

def diff(first, second):
    return [item for item in first if item not in second]
您可以使用快速列表理解来解决问题:

array3 = [i for i in array2 if i not in array1]
这基本上是一种更简单的键入方式:

array3 = []
for i in array2:
    if i not in array1:
        array3.append(i)
此外,您可能不想使用集合。例如:

array1 = [1, 2, 3]
array2 = [1, 2, 3, 3, 4, 4, 5, 6]

array3 = list(set(array2) - set(array1))

数组3将只包含[4,5,6],而不是[4,4,5,6],因为集合不能包含重复项。

在对列表进行迭代时修改列表时,请考虑以下意外行为示例:

def diff(first, second):
    return [item for item in first if item not in second]
a = [10, 10]
for x in a:
  if x == 10:
    a.remove(x)
    print 'item removed'

第一次删除后,第二个10元素成为列表的第一个元素,并且x已经指向第一个元素的位置0。因此,第二次迭代将永远不会发生。

在迭代列表时修改列表时,请考虑以下意外行为的示例:

a = [10, 10]
for x in a:
  if x == 10:
    a.remove(x)
    print 'item removed'

第一次删除后,第二个10元素成为列表的第一个元素,并且x已经指向第一个元素的位置0。因此,第二次迭代将永远不会发生。

您可以使用这两个数组创建集,然后从另一个数组中减去一个来获得结果。因为删除只删除元素的第一次出现。如果要删除所有重复的元素,则确实需要转到set当您在迭代时修改列表时,如果要删除的元素是连续的,则只会删除该元素的某些引用。因此,最好使用列表理解来删除以下答案中所述的元素。如果array2中存在应保留的重复项,则不应使用集合。您可以使用这两个数组创建集合,并从另一个数组中减去一个来获得结果。因为remove只删除元素的第一个匹配项。如果要删除所有重复的元素,则确实需要转到set当您在迭代时修改列表时,如果要删除的元素是连续的,则只会删除该元素的某些引用。因此,最好使用列表理解来删除以下答案中所述的元素。如果array2中存在应保留的重复项,则不应使用集合。