(1) list.sort() 方法
list.sort() 方法就地排序,也就是说会直接作用于当前列表,直接把当前列表变为已排序的列表。它会返回 None。在 Python 中 ,如果一个函数或者方法对对象进行的是就地改动操作,一般来说,它们会返回 None。这样做的目的是让 API 的使用者知道这个函数或者方法是就地改动操作。比如 random.shuffle 函数也有这个特性。
shuffle() 方法会将序列的所有元素进行随机排序。
有利就有弊,因为这些函数或者方法只能返回 None,所以无法像流式编程那样将其一个个串联起来。
(2) 内置函数 sorted()
内置函数 sorted,接受任何形式的可迭代对象作为入参,内部会新建一个列表作为返回值。
(3)关键字参数
list.sort() 方法与 内置函数 sorted() 都有以下两个可选的关键字参数。
关键字参数 | 默认值 | 说明 |
---|---|---|
reverse | False | 是否逆序 |
key | 值排序 | 排序算法;str.lower:忽略大小写的排序;len:基于字符串长度的排序 |
(4)示例
Luciano Ramalho 举了这样一个示例来说明list.sort()方法与函数sorted() 之间的区别。
fruits=['grape','raspberry','apple','banana']
result=sorted(fruits)
logging.info('sorted(fruits) -> %s',result)
logging.info('fruits -> %s',fruits)
result=sorted(fruits,reverse=True)
logging.info('sorted(fruits,reverse=True) -> %s',result)
result=sorted(fruits,key=len)
logging.info('sorted(fruits,key=len) -> %s',result)
result=sorted(fruits,reverse=True,key=len)
logging.info('sorted(fruits,reverse=True,key=len) -> %s',result)
result=fruits.sort()
logging.info('sort() -> %s',result)
logging.info('fruits.sort() from fruits-> %s',fruits)
运行结果:
INFO - sorted(fruits) -> ['apple', 'banana', 'grape', 'raspberry']
INFO - fruits -> ['grape', 'raspberry', 'apple', 'banana']
INFO - sorted(fruits,reverse=True) -> ['raspberry', 'grape', 'banana', 'apple']
INFO - sorted(fruits,key=len) -> ['grape', 'apple', 'banana', 'raspberry']
INFO - sorted(fruits,reverse=True,key=len) -> ['raspberry', 'banana', 'grape', 'apple']
INFO - sort() -> None
INFO - fruits.sort() from fruits-> ['apple', 'banana', 'grape', 'raspberry']
可以看到 list.sort() 方法是就地排序,而函数sorted() 不影响原对象,它会返回一个已排好序的新对象。