为了账号安全,请及时绑定邮箱和手机立即绑定

python的sorted()函数是否保证稳定?

python的sorted()函数是否保证稳定?

梦里花落0921 2019-10-11 10:39:25
该文档不能保证。还有其他记录在案的地方吗?我猜想它可能是稳定的,因为可以保证列表上的sort方法是稳定的(注9:“从Python 2.3开始,保证sort()方法是稳定的”),并且sorted在功能上相似。但是,我找不到任何明确的说法。目的:如果两个记录中的主键相等,则需要基于主键和辅助键进行排序。如果保证sorted()是稳定的,那么我可以对辅助键进行排序,然后对主键进行排序,并获得所需的结果。PS:为避免引起混淆,我使用“稳定”的含义是“排序是稳定的,如果它保证不更改比较相等的元素的相对顺序”。
查看完整描述

3 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

是的,该手册的目的实际上是为了确保其sorted稳定性,并确保使用与该sort方法完全相同的算法。我的确意识到文档不是100%清楚这种身份。总是很高兴地接受doc补丁!


查看完整回答
反对 回复 2019-10-11
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

他们是稳定的。


顺便说一句:您有时可以通过将多遍排序组合到单遍排序中而忽略了解排序和排序是否稳定。


例如,如果你想根据自己对对象进行排序last_name,first_name属性,你可以做一个合格:


sorted_list= sorted(

    your_sequence_of_items,

    key= lambda item: (item.last_name, item.first_name))

利用元组比较。


此答案按原样涵盖了原始问题。对于与排序有关的其他问题,有Python排序方法。


查看完整回答
反对 回复 2019-10-11
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

同时更改文档(相关的commit),而的当前文档sorted明确保证:


内置sorted()功能保证稳定。如果可以保证不更改比较相等的元素的相对顺序,则排序是稳定的-这有助于多次通过排序(例如,按部门排序,然后按薪级等级排序)。


该文档的这一部分已添加到Python 2.7和Python 3.4(+)中,因此该语言版本的任何兼容实现都应具有稳定的sorted。


请注意,对于CPython,list.sort自Python 2.3起一直保持稳定


蒂姆·彼得斯(Tim Peters)重新编写了他的list.sort()实现-这是一种“稳定的排序”(相等的输入在输出中以相同的顺序出现)并且比以前更快。

我目前尚不确定100%的sorted使用率list.sort,但现在还可以查看历史记录。但是很可能“总是”使用了它list.sort。


查看完整回答
反对 回复 2019-10-11
  • 3 回答
  • 0 关注
  • 1008 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信