sun*_*ica 83 python sorted stable-sort
该文档不保证.是否还有其他记录的地方?
我猜它可能是稳定的,因为列表上的排序方法保证是稳定的(注意第9点:"从Python 2.3开始,sort()方法保证稳定"),并且排序在功能上类似.但是,我无法找到任何明确的消息来源.
目的:在两个记录中主键相等的情况下,我需要根据主键和辅助键进行排序.如果sorted()保证稳定,我可以对辅助键进行排序,然后对主键进行排序并获得我需要的结果.
PS:为了避免任何混淆,我使用稳定的意思是"如果它保证不改变比较相等的元素的相对顺序,则排序是稳定的".
Ale*_*lli 110
是的,本手册的目的确实是为了保证sorted稳定,并且确实使用与该sort方法完全相同的算法.我确实意识到文档并不是100%清楚这个身份; doc补丁总是被高兴地接受!
tzo*_*zot 23
他们很稳定.
顺便说一句:你有时可以通过在单遍传递中组合多次传递排序来忽略排序和排序是否稳定.
例如,如果你想根据自己对对象进行排序last_name,first_name属性,你可以做一个合格:
sorted_list= sorted(
your_sequence_of_items,
key= lambda item: (item.last_name, item.first_name))
Run Code Online (Sandbox Code Playgroud)
利用元组比较.
这个答案原样涵盖了原始问题.有关进一步排序相关的问题,有Python排序方法.
文档同时发生了变化(相关提交),并且当前文档sorted明确保证了这一点:
\n\n\n保证内置
\nsorted()功能稳定。如果保证不更改比较相等 \xe2\x80\x94 的元素的相对顺序,则排序是稳定的,这有助于多次排序(例如,按部门排序,然后按工资等级排序)。
这部分文档已添加到 Python 2.7 和 Python 3.4(+) 中,因此该语言版本的任何兼容实现都应该具有稳定的sorted.
请注意,对于 CPython,自Python 2.3list.sort以来一直稳定
\n\n\n\n
\n- 蒂姆·彼得斯重写了他的
\nlist.sort()实现 - 这是一种“稳定排序”(相同的输入在输出中以相同的顺序出现)并且比以前更快。
我不是 100% 确定sorted,现在它简单地使用list.sort,但我还没有检查历史。但它很可能“总是”使用list.sort.