sorted(iterable, key=None, reverse=False)
-
iterable
:
需要排序的可迭代对象(如列表、元组、字符串等)。 -
key
:
一个函数,用于从每个元素中提取排序的依据。如果未指定,默认直接比较元素本身。 -
reverse
:
一个布尔值,True
表示降序,False
表示升序(默认)。
key
的作用和原理
-
原理:
key
函数会对iterable
中的每个元素调用一次,提取一个排序值。- 然后
sorted
会根据这些排序值对元素排序。
-
实际操作:
- 如果
key
没有指定,默认按元素本身进行比较。 - 如果指定了
key
,排序时比较的是key
函数返回的值。
- 如果
示例
1. 按绝对值排序
使用 abs
作为 key
函数。
nums = [-3, 5, -1, 4]
sorted_nums = sorted(nums, key=abs)
print(sorted_nums) # 输出: [-1, -3, 4, 5]
排序过程:abs(-3) = 3
, abs(5) = 5
, abs(-1) = 1
, abs(4) = 4
根据绝对值 [1, 3, 4, 5]
排序,原列表重新排序为 [-1, -3, 4, 5]
。
2. 按字符串长度排序
定义一个 key
函数来返回字符串的长度。
words = ["apple", "banana", "cherry", "date"]
sorted_words = sorted(words, key=len)
print(sorted_words) # 输出: ['date', 'apple', 'cherry', 'banana']
排序过程:len("apple") = 5
, len("banana") = 6
, len("cherry") = 6
, len("date") = 4
按长度 [4, 5, 6, 6]
排序,结果是 ['date', 'apple', 'cherry', 'banana']
。
3. 自定义 lambda
函数作为 key
使用 lambda
提取排序依据,例如按元组的第二个值排序。
pairs = [(1, 3), (2, 2), (4, 1)]
sorted_pairs = sorted(pairs, key=lambda x: x[1])
print(sorted_pairs) # 输出: [(4, 1), (2, 2), (1, 3)]
排序过程:
提取元组的第二个值 [3, 2, 1]
,按升序排序为 [1, 2, 3]
,结果是 [(4, 1), (2, 2), (1, 3)]
。