2017-03-09 63 views
1

我想減去兩個名單,並宣讀了這個問題Remove all the elements that occur in one list from anotherPython的方式減列表左側重複的元素

# a-b 
def subb(a,b): 
    return [i for i in a if i not in b] 

print subb([1,2,1,2],[1,2]) 

但結果是空列表這不是我想要的,我覺得應該是[1,2],所以我更改我的代碼,:

def subb(a,b): 
    for i in b: 
     if i in a: 
      a.remove(i) 
    return a 

現在我想一個Python化的方式用一個簡單的表達式替換這個函數,這樣我可以使用結果函數easily.Is這可能嗎?

謝謝。

+0

所以問題是'subb'是破壞性的? – Elmex80s

回答

1

如果我不要誤會你的意思,這是你想要什麼:

x, y = [1,2,1,2], [1,2] 

print [j for j in x if not j in y or y.remove(j)] 

輸出:

[1, 2] 

如果你想的y值保持不變,你可以試試使用deepcopy,

from copy import deepcopy 
yy = deepcopy(y) 
print [j for j in x if not j in yy or yy.remove(j)] 
+0

這很漂亮! – Mike

+0

但是這對'y'有破壞作用@Mike – Elmex80s

+0

是的,只有我需要的是結果。 – Mike