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 表示交换,降序。
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]


浙公网安备 33010602011771号