python - 获取独特的多集列表

标签 python collections unique combinations multiset

如何在 Python 中唯一化以下列表:

all_the_ways = [(5,), (2, 2, 1), (2, 1, 2), (2, 1, 1, 1), (1, 2, 2),\
                (1, 2, 1, 1), (1, 1, 2, 1), (1, 1, 1, 2), (1, 1, 1, 1, 1)]

期望的输出是:

[(5,), (2, 2, 1), (2, 1, 1, 1), (1, 1, 1, 1, 1)]

即我需要摆脱具有相同数字集但顺序不同的元组。

我试过了

set(all_the_ways)

但它只是转置元素。

当我这样做的时候

list(map(set, all_the_ways))

事情只会变得更糟:

[{5}, {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1}]

换句话说,我需要将内部元组转换为允许多个相等项的集合(set 不适合)并且元素的排列不会改变集合本身(有点像 C++ 的 multiset)

最佳答案

这个怎么样:

list(set(tuple(sorted(s)) for s in all_the_ways))

输出:

[(1, 2, 2), (5,), (1, 1, 1, 1, 1), (1, 1, 1, 2)]

虽然它会破坏每个元组的顺序。我假设这无关紧要,因为对于您的情况,包含相同数字集的元组被认为是相同的。这意味着最终输出列表可能包含不在原始输入中的元组,例如(感谢@thefourtheye):

all_the_ways = [(2, 1, 2), (2, 2, 1)]
# Output: [(1, 2, 2)]

这可能是也可能不是问题,如果是,您可以使用其他优秀答案中已经提到的更强大的解决方案。

关于python - 获取独特的多集列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23356512/

相关文章:

php - 如何将具有一些相同值的php数组拆分并插入到两个具有唯一值的mysql关系表中

python - numpy 数组形状中缺少维度

python - 具有非数字类型的 groupby/aggregate 数据框

Swift 3 - 集合中的结构

java - AbstractList.java中RandomAccess的操作

javascript - 使用元素的值及其在 JavaScript 中重复的次数创建子数组的数组

python - 太阳经度是从脓毒症算起的吗?

python - 如何从多个 python-flask 子进程中收集 prometheus 指标?

java - 如何对字符串列表进行排序,其中首先出现的字符串是startsWith,然后是endsWith

Mysql 具有重复条目的独特行为