排序集(不是一组)

0xC*_*22L 4 python set python-2.7 data-structures

我有许多集合,每个集合代表单个数据文件中的唯一项目.其中一些是其他集的子集,有些是相同的.

是否有一个原语或模块,让我对集合进行排序,以便得到类似的东西

A <= B <= C <= D <= E
Run Code Online (Sandbox Code Playgroud)

等等A,B,C,D,E,F?

即排序不是集合中的项目,而是按照它们之间的关系将集合自身排序为彼此的子集和超集?

Mar*_*ers 8

只需将它们放入列表中并对其进行排序即可.如果一个集合是另一个集合的子集,则它们的<=关系为True,这扩展到排序.换句话说,您想要的是默认排序顺序.

演示:

>>> A = {1, 2}
>>> B = A | {3}
>>> C = B.copy()
>>> D = C | {4}
>>> A <= D
True
>>> [B, C, D, A]
[set([1, 2, 3]), set([1, 2, 3]), set([1, 2, 3, 4]), set([1, 2])]
>>> sorted([B, C, D, A])
[set([1, 2]), set([1, 2, 3]), set([1, 2, 3]), set([1, 2, 3, 4])]
Run Code Online (Sandbox Code Playgroud)

显式:对于所有排序操作,两个不是另一个的子集的集合返回False,并且它们在排序时的相对顺序不会改变.这意味着序列中的不相交集会在工作中抛出一个扳手,因为它们违反了总排序排序的期望.