sort
和 sorted
是 Python 中用于排序的两个核心函数,主要区别如下:
一、适用范围
-
sort
-
仅适用于列表(list)数据类型,属于列表的成员方法,需通过
list.sort()
调用。 -
例如:
my_list.sort()
会直接修改原列表。
-
-
sorted
-
可用于所有可迭代对象(如列表、元组、字符串等),返回一个新的排序后的列表,原对象保持不变。
-
例如:
sorted(my_list)
会返回一个新列表,my_list
仍为原列表。
-
二、返回值
-
sort :无返回值(即
None
),直接修改原列表。 -
sorted :返回一个新的排序后的列表。
三、参数说明
-
共同参数
-
iterable
:需排序的可迭代对象(如列表、元组等)。 -
reverse
:布尔值,True
为降序,False
(默认)为升序。
-
-
sorted特有参数
-
key
:函数,用于指定排序规则(如按字符串长度排序)。 -
cmp
:旧式比较函数(已不推荐使用)。
-
四、示例对比
# 使用 sort 方法(原地排序)
my_list = [3, 1, 4, 1, 5]
my_list.sort(reverse=True)
print(my_list) # 输出: [5, 4, 3, 1, 1]
# 使用 sorted 函数(返回新列表)
my_list = [3, 1, 4, 1, 5]
sorted_list = sorted(my_list, reverse=True)
print(sorted_list) # 输出: [5, 4, 3, 1, 1]
print(my_list) # 原列表保持不变
五、其他注意事项
-
不可变对象 :由于
sort
是原地排序,无法用于不可变对象(如字符串、元组)。对于这些对象,必须使用sorted
。 -
性能 :两者时间复杂度均为 O(n log n),但
sort
因为避免了创建新列表,可能在某些场景下性能更优。
总结
特性 | sort | sorted |
---|---|---|
适用范围 | 仅列表(可变序列) | 所有可迭代对象 |
返回值 | 无返回值(修改原列表) | 新列表 |
参数 | - iterable, reverse | - iterable, key, reverse |
适用场景 | 需要节省内存且不需要保留原数据 | 需要保留原数据或排序多个可迭代对象 |
根据具体需求选择合适的方法:若需原地排序且数据为列表,使用 sort
;若需保留原数据或处理非列表可迭代对象,使用 sorted
。