Python 删除另一个数组中包含的元素
我有两个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:
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中存在应保留的重复项,则不应使用集合。