2016-07-23 85 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 
相關問題