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

2024-04-19 18:06:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道两张单子的区别。你知道吗

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

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

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

我的代码上面的解决方案将两个列表转换为一组,允许-操作符处理它们,但从列表中删除非唯一值。你能想出一个简单的'一行'的解决方案,做到我要找的吗?你知道吗


Tags: 代码列表解决方案this单子want区别
3条回答

以下是我的看法:

x = [1, 1, 2, 2, 3]
y = [1, 2]
z = [n for n in y if (n in x) and x.remove(n)] + x
print(z)  # -> [1, 2, 3]

x = [1, 1, 1, 2]
y = [1]
z = [n for n in y if (n in x) and x.remove(n)] + x
print(z)  # -> [1, 1, 2]

您可以使用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]

缺点是,结果的顺序与输入列表的顺序没有真正的相关性。上面显示的结果看起来是排序的,这一事实依赖于实现,可能只是巧合。你知道吗

可能不是想象,首先想到的是。。你知道吗

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

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

x
[1,2,3]

相关问题 更多 >