Python 中 sorted 和 sort 的区别详解
对于任何 Python 程序员来说,了解 sorted()
和 sort()
函数之间的差异至关重要。这两种函数都可以用于对列表或其他可迭代对象进行排序,但它们在功能和行为上却有明显的不同。本文将深入探讨这两个函数之间的差异,并提供示例来说明它们的用法和适用场景。
函数定义和语法
- sorted() 函数:
sorted()
是一个内置函数,它返回一个新列表,其中包含原始列表中的元素,但按指定顺序排序。它的语法如下:
python
sorted(iterable, key=None, reverse=False)
- sort() 函数:
sort()
是一个方法,它就地对可变对象(如列表)进行排序。它直接修改原始对象,而不返回新对象。它的语法如下:
python
list.sort(key=None, reverse=False)
返回值
- sorted() 函数:
sorted()
函数返回一个新的排序列表,而原始列表保持不变。 - sort() 函数:
sort()
函数不会返回任何值,而是直接修改并返回修改后的列表。
就地修改
- sorted() 函数:
sorted()
函数不会就地修改原始列表。 - sort() 函数:
sort()
函数是一种就地排序算法,它直接修改原始列表。
稳定性
- sorted() 函数:
sorted()
函数是稳定的排序算法,这意味着具有相同值的元素在排序后将保持其相对顺序。 - sort() 函数:
sort()
函数是默认情况下不稳定的排序算法,这意味着具有相同值的元素在排序后可能会交换位置。但是,可以使用stable
参数来启用稳定性。
键函数
- sorted() 函数:
sorted()
函数允许你指定一个键函数,它将用于确定排序的依据。这使你能够根据对象的特定属性进行排序。 - sort() 函数:
sort()
函数不支持键函数。它只使用对象的内置比较运算符进行排序。
性能
就性能而言,sorted()
函数通常比 sort()
函数慢,因为 sorted()
函数会创建一个新的列表,而 sort()
函数直接修改原始列表。但是,当需要稳定性或使用键函数时,sorted()
函数是更好的选择。
用法示例
以下示例演示了 sorted()
和 sort()
函数在不同情况下的用法:
“`python
使用 sorted() 函数进行排序,保持顺序
numbers = [3, 1, 5, 2, 4]
sortednumbers = sorted(numbers)
print(sortednumbers) # 输出:[1, 2, 3, 4, 5]
使用 sort() 函数就地排序
numbers.sort()
print(numbers) # 输出:[1, 2, 3, 4, 5]
使用键函数进行排序
class Person:
def init(self, name, age):
self.name = name
self.age = age
people = [Person(“Alice”, 25), Person(“Bob”, 30), Person(“Carol”, 40)]
people.sort(key=lambda x: x.age)
print([person.name for person in people]) # 输出:[‘Alice’, ‘Bob’, ‘Carol’]
“`
常见问答
1. sorted() 和 sort() 函数哪个更快?
在大多数情况下,sort()
函数比 sorted()
函数更快,因为它直接修改原始列表,而无需创建新列表。
2. sorted() 函数是否稳定?
是,sorted()
函数是稳定的。
3. sort() 函数是否支持键函数?
否,sort()
函数不支持键函数。
4. 什么时候应该使用 sorted() 函数?
当需要生成一个新排序列表、稳定性或使用键函数时,应该使用 sorted()
函数。
5. 什么时候应该使用 sort() 函数?
当需要就地修改原始列表并且不需要稳定性或键函数时,应该使用 sort()
函数。
原创文章,作者:王利头,如若转载,请注明出处:https://www.wanglitou.cn/article_29712.html