Python | 对列表进行排序:sorted(), list.sort()
1. sorted()
函数
sorted()
是 Python 的内置函数,用于对任何可迭代对象进行排序,并返回一个新的已排序的列表。它不会修改原始的可迭代对象。
语法
sorted(iterable, key=None, reverse=False)
参数
- iterable: 需要排序的可迭代对象(如列表、元组、字符串、字典的键等)。
- key: 可选参数,用于指定一个函数,该函数会作用于可迭代对象的每个元素,并根据函数的返回值进行排序。默认值为
None
,表示直接比较元素本身。 - reverse: 可选参数,布尔值。如果为
True
,则排序结果为降序;如果为False
(默认),则排序结果为升序。
返回值
返回一个新的已排序的列表。
示例
# 对列表排序 numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5] sorted_numbers = sorted(numbers) print(sorted_numbers) # 输出: [1, 1, 2, 3, 4, 5, 5, 6, 9] # 对字符串排序 text = "python" sorted_text = sorted(text) print(sorted_text) # 输出: ['h', 'n', 'o', 'p', 't', 'y'] # 对字典的键排序 data = {"b": 2, "a": 1, "c": 3} sorted_keys = sorted(data) print(sorted_keys) # 输出: ['a', 'b', 'c']
特点
- 不修改原始数据:
sorted()
返回一个新的列表,原始可迭代对象不会被修改。 - 适用于任何可迭代对象:可以对列表、元组、字符串、字典的键等进行排序。
- 灵活性高:可以通过
key
和reverse
参数自定义排序规则。
2. list.sort()
方法
概述
list.sort()
是列表对象的方法,用于对列表进行 原地排序,即直接修改原始列表,而不是返回一个新的列表。
语法
list.sort(key=None, reverse=False)
参数
- key: 可选参数,用于指定一个函数,该函数会作用于列表的每个元素,并根据函数的返回值进行排序。默认值为
None
,表示直接比较元素本身。 - reverse: 可选参数,布尔值。如果为
True
,则排序结果为降序;如果为False
(默认),则排序结果为升序。
返回值
list.sort()
没有返回值(返回 None
),因为它直接修改原始列表。即若想将 list.sort()
的结果赋值给变量,会得到 None。
但如果想将排序后的结果赋值给变量,可以先复制原始列表,然后对副本调用 list.sort()
,这样原始列表不会被修改。
示例
# 对列表排序 numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5] numbers.sort() print(numbers) # 输出: [1, 1, 2, 3, 4, 5, 5, 6, 9] # 降序排序 numbers.sort(reverse=True) print(numbers) # 输出: [9, 6, 5, 5, 4, 3, 2, 1, 1] # 使用 key 参数 words = ["apple", "banana", "cherry", "date"] words.sort(key=len) # 按字符串长度排序 print(words) # 输出: ['date', 'apple', 'banana', 'cherry'] numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5] result = numbers.sort() # result 是 None print(result) # 输出: None # 复制列表 sorted_numbers = numbers.copy() sorted_numbers.sort() # 对副本排序 print("原始列表:", numbers) # 输出: 原始列表: [3, 1, 4, 1, 5, 9, 2, 6, 5] print("排序后的列表:", sorted_numbers) # 输出: 排序后的列表: [1, 1, 2, 3, 4, 5, 5, 6, 9]
特点
- 原地修改:
list.sort()
会直接修改原始列表,而不是返回一个新的列表。 - 仅适用于列表:
list.sort()
是列表对象的方法,不能用于其他可迭代对象(如元组、字符串等)。 - 无返回值:
list.sort()
返回None
,因此不能将它的结果直接赋值给变量。
sorted()
和 list.sort()
的区别
是否修改原始数据 | 否(返回新列表) | 是(原地排序) |
返回值 | 返回排序后的新列表 | 返回
|
适用对象 | 任何可迭代对象(列表、元组等) | 仅限列表 |
灵活性 | 更高(支持更多可迭代对象) | 较低(仅限列表) |