Python的sorting()函数保证稳定?
文档不保证。 有没有其他的地方,它被logging在案?
我猜它可能是稳定的,因为列表上的sorting方法保证是稳定的 (注意第9点:“从Python 2.3开始,sort()方法保证是稳定的”),sorting在function上是相似的。 但是,我无法find任何明确的来源说。
目的:在两个logging中主键相同的情况下,我需要根据主键和辅助键进行sorting。 如果sorted()保证是稳定的,那么我可以对辅助键进行sorting,然后对主键进行sorting并获得我需要的结果。
PS:为了避免混淆,我使用stable来表示“如果保证不改变比较相等元素的相对顺序,则sorting是稳定的”。
是的,手册的目的确实是保证sorted
是稳定的,而且确实使用与sort
方法完全相同的algorithm。 我知道这个文件不是100%清楚的, doc补丁总是被高兴地接受!
他们很稳定 。 虽然你不需要知道sorting和sorting是否稳定,因为当你有多个键时你不需要分两步sorting。
例如,如果要基于last_name
, first_name
属性对对象进行sorting,您可以:
sorted_list= sorted( your_sequence_of_items, key= lambda item: (item.last_name, item.first_name))
利用元组比较。
这个答案就是原来的问题。 对于进一步的sorting相关的问题,有Python的sorting方法 。
它可能在此期间发生了变化,但目前的sorted
文件明确指出:
内置的
sorted()
函数保证稳定。 如果确保不会更改比较相等的元素的相对顺序,则sorting是稳定的 – 这对于多次sorting(例如,按部门sorting,然后按薪级)进行sorting很有帮助。
Python 2.4的“新function”文档有效地表明sort()首先创build一个列表,然后调用sort(),为您提供所需的保证,但不在“官方”文档中。 如果你真的担心,你也可以检查来源。