sort()
和 sorted()
是 Python 中用于排序的两个常用函数,但它们在使用方式和功能上有一些区别。
1. sort()
函数
-
功能:
sort()
是列表对象的一个方法,用于对列表进行原地排序(即直接修改原列表)。 -
返回值: 无返回值(返回
None
),因为它直接修改原列表。 -
语法:
list.sort(key=None, reverse=False)
-
key
: 可选参数,用于指定排序的依据(如一个函数)。 -
reverse
: 可选参数,默认为False
,表示升序排序;如果为True
,则表示降序排序。
-
示例:
numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5]
numbers.sort()
print(numbers) # 输出: [1, 1, 2, 3, 4, 5, 5, 6, 9]
# 降序排序
numbers.sort(reverse=True)
print(numbers) # 输出: [9, 6, 5, 5, 4, 3, 2, 1, 1]
2. sorted()
函数
-
功能:
sorted()
是一个内置函数,可以对任何可迭代对象进行排序,并返回一个新的排序后的列表,原对象不会被修改。 -
返回值: 返回一个新的排序后的列表。
-
语法:
sorted(iterable, key=None, reverse=False)
-
iterable
: 需要排序的可迭代对象(如列表、元组、字符串等)。 -
key
: 可选参数,用于指定排序的依据(如一个函数)。 -
reverse
: 可选参数,默认为False
,表示升序排序;如果为True
,则表示降序排序。
-
示例:
numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5]
sorted_numbers = sorted(numbers)
print(sorted_numbers) # 输出: [1, 1, 2, 3, 4, 5, 5, 6, 9]
print(numbers) # 输出: [3, 1, 4, 1, 5, 9, 2, 6, 5](原列表未改变)
# 降序排序
sorted_numbers_desc = sorted(numbers, reverse=True)
print(sorted_numbers_desc) # 输出: [9, 6, 5, 5, 4, 3, 2, 1, 1]
3. 主要区别
特性 | sort() | sorted() |
---|---|---|
作用对象 | 仅适用于列表 | 适用于任何可迭代对象 |
是否修改原对象 | 是(原地排序) | 否(返回新列表) |
返回值 | 无返回值(返回 None ) | 返回一个新的排序后的列表 |
4. 使用场景
-
如果你希望直接修改原列表并且不需要保留原列表的顺序,使用
sort()
。 -
如果你希望保留原列表的顺序,或者需要对非列表的可迭代对象进行排序,使用
sorted()
。
5. key
参数的使用
key
参数允许你指定一个函数,该函数将作用于每个元素上,并根据函数的返回值进行排序。
示例:
# 按字符串长度排序
words = ["apple", "banana", "cherry", "date"]
sorted_words = sorted(words, key=len)
print(sorted_words) # 输出: ['date', 'apple', 'banana', 'cherry']
# 按元组的第二个元素排序
pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
sorted_pairs = sorted(pairs, key=lambda x: x[1])
print(sorted_pairs) # 输出: [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]
总结来说,sort()
和 sorted()
都是用于排序的工具,但根据是否需要修改原对象以及作用对象的类型,你可以选择使用哪一个。