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

标签 python list sorting set

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

编辑:The question and accepted answer in this post更笼统,给出的文档非常深入。我的问题不是重复的。

最佳答案

无论列表中有什么,元素的 __lt__方法是唯一引用的比较方法。对于套装,a < b表示“ab 的真子集”,这不足以定义总顺序。这就是为什么结果通常是未定义的。它可以是原始列表的任何排列,与实现恰好应用的列表元素对一致 __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/

相关文章:

python - 尽管转换为列表,但获取 'dict_keys' 对象不支持索引

python - 使用函数将每个第二个单词替换为单词 'hello'

java - 流按运行时参数排序

javascript - 检查数组的更好方法

python - 如何在 2d python 列表中找到最大数

sorting - 通过匹配数组项进行 Elasticsearch 排序

python - 如何在python中为字符串添加前缀和后缀

python - 如何在 Odoo v11 中添加打印自定义报告按钮?

python - Dask:创建严格递增的索引

python - 如何在Python中从用户输入(日历选择)中获取日期/时间值