返回
Python中的sort()与sorted()函数剖析及应用
后端
2024-02-11 01:40:18
前言
在Python中,sort()
和 sorted()
是两个常用的函数,它们都用于对列表或其他可迭代对象进行排序。然而,这两个函数之间存在一些细微的差别,掌握这些差别对于有效地使用它们至关重要。
比较
特性 | sort() |
sorted() |
---|---|---|
可变性 | 可变 | 不可变 |
可迭代对象 | 仅限列表 | 列表、元组、字符串等 |
返回值 | 无 | 新列表 |
时间复杂度 | 最好:O(n log n),最坏:O(n^2) | O(n log n) |
空间复杂度 | O(1) | O(n) |
用途 | 直接对列表进行排序 | 创建新的已排序列表 |
详解
1. 可变性
sort()
是一个可变函数,这意味着它直接对列表进行排序,并且改变了列表的原始顺序。因此,在使用 sort()
时,您应该确保列表是可变的,即不是元组或字符串。
2. 可迭代对象
sort()
只适用于列表,而 sorted()
可以用于任何可迭代对象,包括列表、元组、字符串、集合等。
3. 返回值
sort()
没有返回值,因为它直接对列表进行排序。sorted()
返回一个新的已排序列表,而不会改变原始列表。
4. 时间复杂度
sort()
的时间复杂度为最好情况下的 O(n log n) 和最坏情况下的 O(n^2),具体取决于排序算法的选择和输入数据的特性。sorted()
的时间复杂度始终为 O(n log n)。
5. 空间复杂度
sort()
的空间复杂度为 O(1),因为它不需要额外的空间来创建新的列表。sorted()
的空间复杂度为 O(n),因为它需要额外的空间来创建新的已排序列表。
何时使用
根据上述比较,您可以根据具体情况选择使用 sort()
或 sorted()
函数。以下是一些使用建议:
-
使用
sort()
:- 当您需要直接对列表进行排序时。
- 当您不需要创建新的已排序列表时。
- 当您需要控制排序算法时(通过指定
key
或reverse
参数)。 - 当您需要使用时间或空间效率更高的排序算法时。
-
使用
sorted()
:- 当您需要对非列表对象进行排序时。
- 当您需要创建新的已排序列表时。
- 当您需要对列表进行简单排序时(不指定
key
或reverse
参数)。 - 当您需要使用更简洁、更具可读性的语法时。
代码示例
以下是一些代码示例,展示了 sort()
和 sorted()
函数的用法:
# 使用 sort() 对列表排序
my_list = [3, 1, 2]
my_list.sort()
print(my_list) # 输出:[1, 2, 3]
# 使用 sorted() 创建新的已排序列表
my_list = [3, 1, 2]
sorted_list = sorted(my_list)
print(sorted_list) # 输出:[1, 2, 3]
print(my_list) # 输出:[3, 1, 2]
# 使用 key 参数对列表中的对象按特定属性排序
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __repr__(self):
return f'{self.name} ({self.age})'
people = [
Person('Alice', 20),
Person('Bob', 30),
Person('Charlie', 10),
]
sorted_people = sorted(people, key=lambda person: person.age)
print(sorted_people) # 输出:[Person('Charlie', 10), Person('Alice', 20), Person('Bob', 30)]
# 使用 reverse 参数对列表进行反向排序
my_list = [3, 1, 2]
sorted_list = sorted(my_list, reverse=True)
print(sorted_list) # 输出:[3, 2, 1]
结论
sort()
和 sorted()
是 Python 中两个常用的排序函数,它们都有各自的优缺点。通过了解这些区别,您就可以根据具体情况选择使用哪种函数,从而提高您的编程效率和代码的可读性。