记录博客 ZH-BLOG

Python list.sort() 与 sorted()

时间:2018-07-31 22:43:42分类:python

list.sort() 与 sorted() 的区别

list.sort 方法会就地排序列表,不会把原列表复制一份,所以这个方法的返回值是 None。

内置函数 sorted 与 list.sort 相反,它会新建一个列表作为返回值。sorted 还可以接收不可变序列或生成器,它最后都会返回一个列表

相同点:

都有两个可选的关键字参数

reverse:默认值 False,如果设为 True,则反序。

key:一个只有一个参数的函数。序列里的每一项都会应用到该函数,返回的结果作为排序的关键值。

>>> fruits = ['grape', 'raspberry', 'apple', 'banana']
>>> sorted(fruits)
['apple', 'banana', 'grape', 'raspberry']
>>> fruits
['grape', 'raspberry', 'apple', 'banana'] # fruits 自身并没有被改变
>>> sorted(fruits, reverse=True) # 反序
['raspberry', 'grape', 'banana', 'apple']
>>> sorted(fruits, key=len)
['grape', 'apple', 'banana', 'raspberry'] # len(grape)与len(apple)是相等的,它们的位置是相对于原始fruits中的位置
>>> sorted(fruits, key=len, reverse=True)
['raspberry', 'banana', 'grape', 'apple'] # 位置同理
>>> fruits
['grape', 'raspberry', 'apple', 'banana']
>>> fruits.sort() # 原始列表自身排序
>>> fruits
['apple', 'banana', 'grape', 'raspberry'] # fruits 改变了

Python 的排序算法 - Timsort 是稳定的, 意思是两个元素排不出先后顺序时, 在每次排序的结果里它们的相对(原始)位置是固定的。