[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设置为一个自定义函数很有用。