加载中...

python 排序

arr.sort() 和 sorted(arr)

前者改变原列表;后者不改变,而是直接生成一个排好序的新列表。

复杂列表排序:利用 sorted() 中的 key。

格式:sorted(arr, key=..., reverse=...)

# 将字符串按照长度升序排序
arr = ["Alice", "Bob", "CCCCCC"]
arr = sorted(arr, key = len)
print(arr) # ['Bob', 'Alice', 'CCCCCC']

key 中的内容经常会使用 lambda 函数,即:\(sorted(arr, key=lambda\space x:..., reverse=...)\)

# 将字符串按照长度升序排序
arr = ["Alice", "Bob", "CCCCCC"]
arr = sorted(arr, key=lambda x:len(x))
print(arr) # ['Bob', 'Alice', 'CCCCCC']
# 按照元组的某一维升序排序
arr = [(4, 2), (1, 3), (2, 1)]
arr = sorted(arr, key=lambda x:x[1])
print(arr) # [(2, 1), (4, 2), (1, 3)]
"""优先按照维度a降序排序,其次按照维度b升序排序 -> 将返回值设定为元组,利用元组的内置排序即可"""
arr = [("Alice", 16, 110), ("Bob", 20, 130), ("Cindy", 18, 120), ("David", 16, 120)]
arr = sorted(arr, key=lambda x:(-x[2], x[1]))
print(arr) """[('Bob', 20, 130), ('David', 16, 120), ('Cindy', 18, 120), ('Alice', 16, 110)]"""

cmp_to_key

也可以利用 functools 模块中的 cmp_to_key() 函数来实现复杂的排序自定义函数:

格式:cmp_to_key(自定义排序函数),返回值为 -1 可以理解为不交换,升序;返回值为 1 表示交换,降序。

peCqDKJ.png

a = [2, 3, 5, 1, 4]
a.sort(key=cmp_to_key(lambda x,y: -1 if x < y else 1)) # 可以理解为 -1 不交换,1 交换
print(a) # [1,2,3,4,5]
posted @ 2025-08-28 19:30  小橘奏  阅读(24)  评论(0)    收藏  举报