[Python基础]列表排序sort和sorted
文章目录
- [Python基础]列表排序sort和sorted
- 1. sort
- 2. sorted
- 3. 如何使用sort获得排序后的列表的副本呢?
- 4. 元素按相反顺序排列
- 5. 高级排序
1. sort
作用:对列表就地排序
就地排序意味着对原来的列表进行修改,使元素按顺序排列,而不是返回排序后的列表的副本。
x = [4,6,2,1,7,9]
x.sort()
print(x)
运行结果为:[1, 2, 4, 6, 7, 9]
2. sorted
作用:获得排序后的列表的副本
x = [4,6,2,1,7,9]
y = sorted(x)
print(x)
print(y)
运行结果为:
[4,6,2,1,7,9]
[1,2,4,6,7,9]
实际上,函数sorted可用于任何可迭代的对象。
3. 如何使用sort获得排序后的列表的副本呢?
错误的方法:
x = [4,6,2,1,7,9]
y = x.sort() # Don't do this!
print(y)
你得到的结果是None。
sort修改x且不返回任何值,最终你得到的x是排序后的,而y是None。
只是将x赋值给y也是不行的,因为这样x和y将指向同一个列表。
正确的做法是将y关联到x的副本再对y排序:
x = [4,6,2,1,7,9]
y = x.copy()
y.sort()
print(x)
print(y)
你会发现x还是原来的,y是排序好的。
4. 元素按相反顺序排列
先使用sort或sorted,再调用方法reverse,也可以使用参数reverse。
5. 高级排序
方法sort接受两个可选参数:key和reverse。这两个参数通常是按名称指定的,称为关键字参数。参数key你将其设置为一个用于排序的函数(Python内置函数或自定义函数)。
然而,不会直接使用这个函数来判断一个元素是否比另一个元素小,而是使用它来为每个元素创建一个键,再根据这些键对元素进行排序。因此,要根据长度对元素进行排序,可将参数 key 设置为函数len。
x = ['aardvark', 'abalone', 'acme', 'add', 'aerate']
x.sort(key=len)
print(x)
[‘add’, ‘acme’, ‘aerate’, ‘abalone’, ‘aardvark’]
对于另一个关键字参数reverse,只需将其指定为一个真值(True或False),以指出是否要按相反的顺序对列表进行排序。
x = [4, 6, 2, 1, 7, 9]
x.sort(reverse=True)
print(x)
[9, 7, 6, 4, 2, 1]
函数sorted也接受参数key和reverse。在很多情况下,将参数key设置为一个自定义函数很有用。