python中sorted()和sort()的区别

在 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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值