获取列表之间的差异,保持非唯一值

时间:2015-10-28 17:01:30

标签: python list python-3.x difference

我希望得到两个列表之间的区别。

我正在寻找像this这样的解决方案,我只想考虑非唯一列表值。

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

# i want
z = x - y
# z = [1, 2, 3]

我的代码上方的解决方案将两个列表转换为集合,允许-运算符处理它们,但从列表中删除非唯一值。你能想到一个简单的一个班轮'做我正在寻找的解决方案?

4 个答案:

答案 0 :(得分:1)

您可以使用collections.Counter查找每个列表中的元素计数。然后你可以从结果中获取差异并重建一个列表。

>>> from collections import Counter
>>> x = [1, 1, 2, 2, 3]
>>> y = [1, 2]
>>> [k for _ in range(v) for k,v in (Counter(x) - Counter(y)).iteritems()]
[1, 2, 3]

缺点是,结果的顺序与输入列表的顺序没有实际关联。上面显示的结果看起来排序的事实是依赖于实现的,可能只是巧合。

答案 1 :(得分:1)

可能不是幻想,首先想到的是......

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

_ = [ x.remove(n) for n in y if n in x ]

x
[1,2,3]

答案 2 :(得分:1)

这是我的看法:

.section-body {
    display: none;
    border: 1px solid black;
    overflow:auto; /* ADDED */
}

答案 3 :(得分:0)

您刚刚描述了两个集的并集,因此请使用set

>>> list(set(x).union(set(y)))
[1, 2, 3]