Python列表排序方法汇总,超详细!-冯金伟博客园

1. 修改原列表,不创建新列表的排序

1 a = [3, 2, 8, 4, 6]
2 print(id(a))  # 2180873605704
3 a.sort()  # 默认升序
4 print(a)  # [2, 3, 4, 6, 8]
5 print(id(a))  # 2180873605704
6 
7 a.sort(reverse=True)
8 print(a)  # [8, 6, 4, 3, 2]
1 # 将序列的所有元素随机排序
2 import random
3 b = [3, 2, 8, 4, 6]
4 random.shuffle(b)
5 print(b)  # [4, 3, 6, 2, 8]

2. 创建新列表的排序

通过内置函数sorted()进行排序,这个方法返回新列表,不对原列表做修改。

1 a = [3, 2, 8, 4, 6]
2 b = sorted(a)  # 默认升序
3 c = sorted(a, reverse=True)  # 降序
4 print(b)  # [2, 3, 4, 6, 8]
5 print(c)  # [8, 6, 4, 3, 2]

3. 冒泡排序

 1 list1 = [34,54,6,5,65,100,4,19,50,3]
 2 
 3 #冒泡排序,以升序为例
 4 
 5 #外层循环:控制比较的轮数
 6 for i in range(len(list1) - 1):
 7     #内层循环:控制每一轮比较的次数,兼顾参与比较的下标
 8     for j in range(len(list1) - 1 - i):
 9         #比较:只要符合条件则交换位置,
10         # 如果下标小的元素 > 下标大的元素,则交换位置
11         if list1[j] < list1[j + 1]:
12             list1[j],list1[j + 1] = list1[j + 1],list1[j]
13 print(list1)

4. 选择排序

 1 li = [17, 4, 77, 2, 32, 56, 23]
 2 
 3 # 外层循环:控制比较的轮数
 4 for i in range(len(li) - 1):
 5     # 内层循环:控制每一轮比较的次数
 6     for j in range(i + 1, len(li)):
 7         # 如果下标小的元素>下标大的元素,则交换位置
 8         if li[i] > li[j]:
 9             li[i], li[j] = li[j], li[i]
10 print(li)