Pythonic方式减去列表左侧重复元素

时间:2017-03-09 11:09:53

标签: python list

我想减去两个列表并阅读此问题Remove all the elements that occur in one list from another

# 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

现在我想要一个Pythonic方法用一个简单的表达式替换这个函数,这样我就可以轻松地在函数中使用结果。这可能吗?

感谢。

1 个答案:

答案 0 :(得分: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)]