2016-07-23 97 views
1

相关删除列表中的元素:Remove all the elements that occur in one list from another蟒蛇从项目多次出现另一个列表中都

我有listA的[1, 1, 3, 5, 5, 5, 7]和数组listB [1, 2, 5, 5, 7],我想减去出现从项目listA的的。结果应该是一个新的列表:[1, 3, 5] 注:

  1. 1有2次出现为listA和曾经在数组listB,现在看来2-1 = 1倍
  2. 2并没有出现在listA的,所以没有什么发生
  3. 3停留1次出现的,如在其listA的未在数组listB
  4. 5发生3次,并且在数组listB 2,所以现在它发生3-2 = 1倍
  5. 7 OC现在它会出现1-1 = 0次

这是否有意义?

回答

1

在这样的情况下列表理解应始终使用:

listA = [1, 1, 3, 5, 5, 5, 7] 
listB = [1, 2, 5, 5, 7] 

newList = [i for i in listA if i not in listB or listB.remove(i)] 

print (newList) 

下面是结果:

[1, 3, 5]

+0

副作用通常不用于列表解析。 @Dart答案更直接,并且没有修改'listB'的可能不良副作用。 OP只需要从'listA'中删除的项目。这并没有从'listA'中删除项目,但生成了一个新列表。 –

+0

@MarkTolonen好评。如果OP指定了他/她想要的结果,我可以调整我的答案。 –

+0

谢谢 - 这正是我的意思。看到镖解决方案是直截了当的,但我正在寻找这种单线 – ihadanny

3

这里是为这些新的Python

非列表理解版本
listA = [1, 1, 3, 5, 5, 5, 7] 
listB = [1, 2, 5, 5, 7] 
for i in listB: 
    if i in listA: 
     listA.remove(i) 

print listA