我有多个集合,每个集合代表单个数据文件中的唯一项目。其中一些是其他集的子集,有些是相同的。
是否有原语或模块可以让我对集合进行排序,以便得到类似
的内容A <= B <= C <= D <= E
对于集合A,B,C,D,E,F?,等等
即。排序不来自集合中的项目,而是根据它们之间的关系将集合本身排序为彼此的子集和超集?
答案 0 :(得分: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])]
要明确:对于所有排序操作,两个不是另一个的子集的集合返回False,并且在排序时它们的 relative 顺序不会更改。这意味着序列中的不相交集会在工作中抛出一个扳手,因为它们违反了总排序排序的期望。