Python sorted() 和 sort() 的区别:深入探讨
在 Python 中,sorted()
和 sort()
都是用于排序列表或其他可迭代对象的方法。虽然两个方法都有相似的目标,但它们在处理列表的方式以及返回值方面存在一些关键区别。本文将深入探讨这两个方法之间的差异,以便帮助您根据特定需求做出最佳选择。
sorted()
函数
sorted()
是一个内置函数,它返回一个由其参数排序的新列表,而不会修改原始列表。以下是其语法:
sorted(iterable, key=None, reverse=False)
其中:
iterable
:要排序的序列,例如列表、元组或字符串。key
:可选的函数,用于提取要根据其排序每个元素的值。reverse
:可选的布尔值,用于指定是否按降序(True
)或升序(False
)排序。
sorted()
函数根据以下规则对元素进行排序:
- 数字按数字大小排序。
- 字符串按字母顺序排序。
- 列表和元组按元素逐个比较排序。
示例:
python
my_list = [5, 3, 1, 2, 4]
sorted_list = sorted(my_list)
print(sorted_list) # 输出:[1, 2, 3, 4, 5]
要点:
sorted()
不会修改原始列表。- 它返回一个已排序的新列表。
- 可以使用
key
参数根据自定义规则排序。 - 默认情况下按升序排序。
sort()
方法
sort()
是列表内置的方法,它直接对列表进行排序,而不是返回新的列表。以下是它的语法:
list.sort(key=None, reverse=False)
其中:
list
:要排序的列表。key
:可选的函数,用于提取要根据其排序每个元素的值。reverse
:可选的布尔值,用于指定是否按降序(True
)或升序(False
)排序。
sort()
方法的作用与 sorted()
函数类似,但它有一些不同的特性:
- 直接修改列表。
- 不返回任何值。
- 默认情况下按升序排序。
示例:
python
my_list = [5, 3, 1, 2, 4]
my_list.sort()
print(my_list) # 输出:[1, 2, 3, 4, 5]
要点:
sort()
直接修改原始列表。- 它不会返回任何值。
- 可以使用
key
参数根据自定义规则排序。 - 默认情况下按升序排序。
关键区别总结
下表总结了 sorted()
和 sort()
之间的关键区别:
| 特性 | sorted()
| sort()
|
|—|—|—|
| 返回值 | 新的已排序列表 | 无 |
| 修改原始列表 | 否 | 是 |
| 默认排序顺序 | 升序 | 升序 |
| 自定义排序 | 支持 key
参数 | 支持 key
参数 |
何时使用 sorted()
和 sort()
在选择使用 sorted()
或 sort()
时,考虑以下准则:
- 需要返回一个已排序的新副本:使用
sorted()
。 - 不需要返回任何值,只想修改列表:使用
sort()
。 - 需要根据自定义规则排序:使用
key
参数。
常见问答
1. sorted()
和 sort()
中的 key
参数如何工作?
key
参数是一个函数,它从每个元素中提取一个值,该值将用于进行排序。这允许您根据任何自定义规则对元素进行排序。
2. 为什么在排序数字时 sorted()
和 sort()
返回不同的结果?
默认情况下,sorted()
将数字视为字符串并按字母顺序排序,而 sort()
将数字视为数字并按数值大小排序。要按数值大小使用 sorted()
,请使用 sorted(my_list, key=int)
。
3. 如何对元组或列表中的列表进行排序?
您可以使用 key=lambda x: x[index]
语法,其中 index
是要根据其排序的子列表的索引。
4. 如何对字典值进行排序?
使用 sorted(my_dict.items(), key=lambda x: x[1])
,其中 x[1]
是值。
5. 如何对按字母顺序排列字符串的列表进行反向排序?
使用 sorted(my_list, key=str.lower, reverse=True)
,其中 str.lower
将字符串转换为小写,用于排序。
原创文章,作者:蒋玉颖,如若转载,请注明出处:https://www.wanglitou.cn/article_71098.html