从集合列表中设置

时间:2015-05-05 21:21:12

标签: python set

我在Python工作。我有一个大型列表L = [X_{1}, X_{2}, ....,X_{n}],其中每个X_{i}都是一个集合。对于某些不同的索引i, j,我们可能有X_{i} = X_{j}。 我想创建一个列表(或集合)L_{1} = [Y_{1}, Y_{2}, ... ,Y_{k}],使得集合(在数学意义上){X_{1},..., X_{n}} = {Y_{1}, ..., Y_{k}}L_{1}的长度最小(在其他单词{{1}没有重复)。

对于后续应用程序,我需要访问L_{1}的元素。所以我不能使用L_{1}选项。

使用frozenset会出现错误set(L)

我想我可以使用循环结构解决它,但我想知道在Python中是否有更优雅的解决方案来解决这个问题。

1 个答案:

答案 0 :(得分:6)

如果您想消除重复的集合,则需要将它们转换为frozenset()个实例:

unique_sets = {frozenset(s) for s in L}

或者如果您使用的是Python 3:

unique_sets = set(map(frozenset, L))

如果您需要再次使用可变集合列表,则可以再次生成set()个对象列表:

unique_set_list = [set(s) for s in unique_sets]

您可以将两者合并为一个列表理解,但可读性稍有下降:

seen = set()
unique_set_list = [ms for ms, ims in ((s, frozenset(s)) for s in L)
                   if not (ims in seen or seen.add(ims))]