在 Python 中,sorted()
和 .sort()
都是用于对数据进行排序的函数,但它们之间存在一些关键区别。以下是详细对比:
🔎 sorted()
与 .sort()
的区别对比表
特点 | sorted() | .sort() |
---|---|---|
返回值 | 返回一个新的已排序列表,原列表不变 | 原地排序,直接修改原列表 |
可用数据类型 | 适用于任意可迭代对象 (如字符串、元组、字典、集合等) | 仅适用于列表 (list) |
语法 | sorted(iterable, key=..., reverse=...) | list.sort(key=..., reverse=...) |
稳定性 | 稳定排序(保持相同元素的原始顺序) | 稳定排序(保持相同元素的原始顺序) |
效率 | 通常比 .sort() 稍微慢一些(因其创建了新对象) | 更快(无需创建新列表) |
🧩 用法示例
1️⃣ sorted()
示例 (适用于任意可迭代对象)
# 原列表
nums = [3, 1, 4, 1, 5, 9]
# 使用 sorted()(返回新列表)
sorted_nums = sorted(nums)
print("原列表:", nums) # 原列表: [3, 1, 4, 1, 5, 9] (原列表不变)
print("排序后:", sorted_nums) # 排序后: [1, 1, 3, 4, 5, 9]
✅ 特点:
sorted()
返回一个新的已排序列表,而不改变原列表。
2️⃣ .sort()
示例 (仅适用于 list
)
# 原列表
nums = [3, 1, 4, 1, 5, 9]
# 使用 .sort()(修改原列表)
nums.sort()
print("原列表(排序后):", nums) # 原列表(排序后): [1, 1, 3, 4, 5, 9]
✅ 特点:
.sort()
直接在原列表上操作,不会返回新列表。
3️⃣ key
参数 (自定义排序规则)
key
参数用于指定自定义排序逻辑。
使用 sorted()
的 key
参数
words = ["apple", "banana", "cherry", "date"]
sorted_words = sorted(words, key=len) # 按字符串长度排序
print(sorted_words) # 输出:['date', 'apple', 'banana', 'cherry']
使用 .sort()
的 key
参数
words = ["apple", "banana", "cherry", "date"]
words.sort(key=len) # 原地排序
print(words) # 输出:['date', 'apple', 'banana', 'cherry']
4️⃣ reverse
参数 (降序排序)
sorted()
降序排序
numbers = [10, 2, 8, 3]
print(sorted(numbers, reverse=True)) # 输出:[10, 8, 3, 2]
.sort()
降序排序
numbers = [10, 2, 8, 3]
numbers.sort(reverse=True)
print(numbers) # 输出:[10, 8, 3, 2]
5️⃣ 非 list
类型的排序 (仅 sorted()
支持)
# 对元组排序
tup = (3, 1, 4, 1)
print(sorted(tup)) # 输出:[1, 1, 3, 4]
# 对字符串排序
string = "python"
print(sorted(string)) # 输出:['h', 'n', 'o', 'p', 't', 'y']
# 对集合排序
set_nums = {3, 1, 4}
print(sorted(set_nums)) # 输出:[1, 3, 4]
.sort()
仅适用于 list
,因此这些类型只能使用 sorted()
。
📋 何时使用 sorted()
,何时使用 .sort()
?
✅ 使用 sorted()
的情况
- 当需要保留原始数据且生成一个新的已排序版本时。
- 当数据类型不是
list
(如字符串、元组、集合等)时。
✅ 使用 .sort()
的情况
- 当只需对
list
进行原地排序时,且不关心保留原始数据时。 .sort()
更节省内存,通常效率更高。
🎯 总结
如果你想... | 使用方法 |
---|---|
保留原列表,生成新列表 | sorted() |
原地排序(不生成新列表) | .sort() |
排序字符串、元组、集合等 | sorted() |
对 list 进行快速排序 | .sort() |