跳转至

2 排序

  在蓝桥杯中,所有的数组都是以列表的形式存在的,多维数组就是列表嵌套列表。

排序是否修改原列表

修改原列表的排序

  如果要直接在一个列表上面排序,可以使用列表内置的sort()方法:

numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5]
numbers.sort()
print(numbers) # [1, 1, 2, 3, 4, 5, 5, 6, 9]
注意这个方法没有返回值,即返回为None

不修改原列表的排序

  有时候不希望修改原来的列表,而是将原列表排序后的结果赋给另一个新的列表。这个时候可以使用 python 内置的sorted()方法:

numbers = [3, 1, 4, 1, 5]
sorted_numbers = sorted(numbers)
print(sorted_numbers) # [1, 1, 3, 4, 5]
print(numbers) # [3, 1, 4, 1, 5]

其它参数

降序排序

一般来说sort()sorted都是默认升序排序,如果需要降序排序的话,可以指定参数reverse=True

numbers = [1, 1, 4, 5, 1, 4]
print(sorted(numbers, reverse=True)) # [5, 4, 4, 1, 1, 1]
numbers.sorted()
print(numbers) # [5, 4, 4, 1, 1, 1]

排序方式函数

  两个排序函数还能接受key参数,这个参数需要是一个含一个参数、有一个返回值的函数,排序时会将这个函数作用于列表的每个元素进行排序。例如,根据字符串的长度进行排序:

words = ['banana', 'pie', 'Washington', 'book']
words.sort(key=len)
print(words) # ['pie', 'book', 'banana', 'Washington']
  又比如说平面上的一堆点 $(x _ i,y _ i)$ 构成的点集,需要根据横坐标 $x _ i$ 从小到大排序:
points = [[1,4],[3,7],[2,6],[-1,3]]
print(sorted(points, key=lambda x:x[0])) # [[-1, 3], [1, 4], [2, 6], [3, 7]]
  其实两个排序函数还能接受一个cmp参数,这个和 C++ 中sorted()的第三个参数比较类似,cmp参数对应一个含有两个参数、返回一个值的函数。但是据说这个特性在 python3 中已经弃用了,所以直接用key参数就行了。