Python 通过按顺序查看元组的元素来对元组列表进行排序。由于集合是无序的,Python 如何对集合列表进行排序?
编辑:The question and accepted answer in this post更笼统,给出的文档非常深入。我的问题不是重复的。
最佳答案
无论列表中有什么,元素的 __lt__
方法是唯一引用的比较方法。对于套装,a < b
表示“a
是 b
的真子集”,这不足以定义总顺序。这就是为什么结果通常是未定义的。它可以是原始列表的任何排列,与实现恰好应用的列表元素对一致 __lt__
到。
如果对于列表中的每一对集合,其中一个实际上是另一个的真子集,则列表将从最小(基数)集合到最大集合排序。否则几乎无话可说。例如:
>>> sorted([{5, 6}, {3, 4}, {5}, {3}]) # nothing changes
[{5, 6}, {3, 4}, {5}, {3}]
发生的事情是未定义实现细节的结果。自从我写了list.sort()
,我知道在这种情况下会发生什么,但不能保证始终以这种方式工作:
首先,实现会询问“是 {3, 4} < {5, 6}
吗?”。不,所以前两个元素的顺序与已经排序的顺序一致。接下来它会询问“是 {5} < {3, 4}
吗?”。不,所以前三个元素似乎已经排序。最后它问“是 {3} < {5}
吗?”。又不是,所以原始列表的整个顺序与已经排序的顺序一致,没有任何变化。
例如, future 的实现可能会询问“是 {5} < {5, 6}
吗?”在某个时候,因为"is"决定{5}
需要出现在 {5, 6}
之前.所以结果根本没有定义。
关于python - Python 如何对集合列表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42956966/