python中sorted()和sort()有什么区别
时间: 2025-05-29 13:54:25 浏览: 16
### Python中`sorted()`和`sort()`的区别
#### 基本概念
在Python中,`sorted()`是一个内置函数,而`list.sort()`是列表对象的一个方法。两者都可以用于对数据进行排序,但在使用场景和行为上有显著差异。
#### 返回值的不同
`sorted()`会返回一个新的已排序的列表,而不会修改原列表的内容[^4]。
例如:
```python
numbers = [3, 1, 4, 2, 5]
sorted_numbers = sorted(numbers)
print(sorted_numbers) # 输出:[1, 2, 3, 4, 5]
print(numbers) # 输出:[3, 1, 4, 2, 5]
```
相比之下,`list.sort()`会对调用它的列表就地排序,并不创建新的列表[^1]。
例如:
```python
numbers = [3, 1, 4, 2, 5]
numbers.sort()
print(numbers) # 输出:[1, 2, 3, 4, 5]
```
#### 可应用的数据结构
`sorted()`可以应用于任何可迭代的对象(如字符串、元组、字典键等),并将其转换为一个有序的列表[^3]。
例如:
```python
result = sorted({1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'})
print(result) # 输出:[1, 2, 3, 4, 5]
```
然而,`list.sort()`仅适用于列表类型的对象。如果尝试对其它类型的数据调用此方法,则会引发错误。
#### 参数支持的一致性
无论是`sorted()`还是`list.sort()`,它们均支持相同的三个参数:`key`, `reverse` 和默认无名参数。通过设置这些参数能够实现更复杂的排序逻辑[^2]。比如利用自定义lambda表达式作为关键字来进行多重条件下的排列操作。
示例代码如下所示:
```python
students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
sorted_students = sorted(students, key=lambda student: (student[1], -student[2]), reverse=False)
print(sorted_students) # 根据成绩字母顺序以及年龄倒序组合排序后的结果
```
---
### 总结对比表
| 特性 | `sorted(iterable)` | `list.sort()` |
|-------------------|-------------------------------------|------------------------------------|
| **适用范围** | 所有可迭代对象 | 列表 |
| **是否改变原有数据** | 否 | 是 |
| **返回新列表** | 是 | 否 |
以上即为关于`sorted()`同`list.sort()`之间主要区别的详尽解析[^1][^3][^4]。
阅读全文
相关推荐


















