Python如何对集合列表进行排序?

Lup*_*lum 2 python sorting list set

Python按顺序查看元组的元素,对元组列表进行排序.由于集合是无序的,Python如何对集合列表进行排序?

编辑:这篇文章的问题和接受的答案更为一般,所给出的文件非常深入.我的问题不是重复的.

Tim*_*ers 7

无论列表中的内容是什么,元素的__lt__方法都是唯一参考的比较方法.对于集合,a < b意味着" a是一个适当的子集b",这不足以定义总订单.这就是为什么结果通常是未定义的.它可以是原始列表的任何排列,与实现恰好适用__lt__于哪些列表元素对.

如果对于列表中的每对集合,其中一个实际上是另一对的适当子集,则列表将从最小(基数)集合排序到最大.否则很少可以说.例如:

>>> sorted([{5, 6}, {3, 4}, {5}, {3}])  # nothing changes
[{5, 6}, {3, 4}, {5}, {3}]
Run Code Online (Sandbox Code Playgroud)

发生的是未定义的实现细节的结果.自从我写完以来list.sort(),我知道在这种情况下会发生什么,但不能保证总是以这种方式工作:

首先,实现问"是{3, 4} < {5, 6}吗?".不,所以前两个元素的顺序与已经排序一致.它接下来问"是{5} < {3, 4}吗?".不,所以前三个元素似乎已经排序了.最后它问"是{3} < {5}吗?".再也没有了,所以原始列表的整个订单与已经排序的一致,没有任何变化.

未来的实施可能会例如问"是{5} < {5, 6}吗?" 在某些时候,因为"是"决定{5}需要出现之前{5, 6}.所以结果根本没有定义.