📜  sort 和 sorted 之间的区别 - Python (1)

📅  最后修改于: 2023-12-03 15:20:11.278000             🧑  作者: Mango

sort 和 sorted 之间的区别 - Python

在 Python 中,sortsorted 都是用于对列表进行排序的函数,它们之间的区别在以下几个方面:

1. 原地排序和返回排序结果

sort 是原地排序函数,它会直接修改原列表,不会返回排序结果。而 sorted 则是返回排序结果的函数,它不会修改原列表。

以下是 sortsorted 的使用示例:

a = [3, 1, 4, 2, 5]

a.sort()  # 对原列表进行排序
print(a)  # 输出 [1, 2, 3, 4, 5]

b = [3, 1, 4, 2, 5]

c = sorted(b)  # 返回排好序的列表
print(b)  # 输出 [3, 1, 4, 2, 5]
print(c)  # 输出 [1, 2, 3, 4, 5]
2. sort 只能用于列表,sorted 可以用于任何可迭代对象

sort 只能用于列表,而 sorted 可以用于任何可迭代对象,比如元组、集合等。

以下是 sortsorted 对可迭代对象的支持对比:

a = (3, 1, 4, 2, 5)

a.sort()  # TypeError: 'tuple' object has no attribute 'sort'

b = (3, 1, 4, 2, 5)

c = sorted(b)  # 返回排好序的列表
print(b)  # 输出 (3, 1, 4, 2, 5)
print(c)  # 输出 [1, 2, 3, 4, 5]
3. sort 不能用于混合类型的列表

sort 只能用于列表中元素类型相同的情况,如果列表中有不同类型的元素,则会抛出 TypeError

以下是 sort 对混合类型的列表的处理:

a = [3, 1, 'a', 2, 5]

a.sort()  # TypeError: '<' not supported between instances of 'str' and 'int'

sorted 则没有这个问题。

4. sorted 可以接收关键字参数

sorted 函数可以接收一个 key 参数,用于指定排序时使用的比较函数,也可以接收一个 reverse 参数,用于指定是否要反向排序。

以下是 sorted 函数的关键字参数示例:

a = ['abc', 'ab', 'abcd', 'a']

b = sorted(a, key=len)  # 按照字符串长度排序
print(b)  # 输出 ['a', 'ab', 'abc', 'abcd']

c = sorted(a, key=len, reverse=True)  # 按照字符串长度反向排序
print(c)  # 输出 ['abcd', 'abc', 'ab', 'a']

综上所述,sortsorted 在使用上存在一些区别,在选择使用时需要根据实际情况来决定。