在Python中,reversed() 和 sorted() 是两个用于处理序列(如列表、元组,字典的key/value等)的内置函数,当然它们的功能和用途也有明显的区别。
区别
- 功能:reversed() 是反转有序序列的顺序(如果对无序序列排序会报错,比如无序的字典和集合),而 sorted() 对有序或者无序序列都可进行排序(不光是反转排序,可指定不同的排序方式)。
- 返回值类型:reversed() 返回一个迭代器,而 sorted() 返回一个列表list。
- 原始序列:两者都不会改变原始序列。
- 参数:两者都接受一个可迭代对象作为参数。而sorted() 还可以接受额外的参数,如 key 和 reverse,用于定制排序行为。
- 性能:对于大型数据集,由于 reversed() 只是简单地反转迭代器的方向,因此通常比 sorted()(它需要执行排序算法)更快。但是,如果你需要排序的数据,那么 sorted() 是必需的。
- 用途:reversed() 通常用于需要反向迭代序列的场景,而 sorted() 用于需要按特定顺序(通常是升序或降序)处理序列元素的场景。
reversed()功能
reversed() 函数返回一个反转的迭代器,它不会改变原始序列,该迭代器按相反的顺序展示原始序列中的元素。
示例
反转list数据
my_list = [1, 2, 3, 4, 5]
reversed_iter = reversed(my_list)
print(reversed_iter)
#结果
<list_reverseiterator object at 0x10cd87e50>
reversed_iter 是一个迭代器,我们需要将其转换为列表才能直接查看其内容,输出的是倒序排列的列表。
reversed_list = list(reversed_iter)
print(reversed_list)
# 输出: [5, 4, 3, 2, 1]
同时因为返回的是迭代器,可用于for循环:
for i in reversed(my_list):
print(i)
注意 原始列表my_list 没有被改变
print(my_list)
# 输出:
[1, 2, 3, 4, 5]
如果传入的是非有序序列,比如传入集合,程序会报错:
my_set = {5, 1, 4, 2, 3}
reversed_iter = reversed(my_set)
#报错
TypeError: 'set' object is not reversible
sorted()
sorted() 函数返回一个新的已排序的列表list,它也不会改变原始序列。你可以对任何可迭代对象进行排序,并可以选择一个排序关键字函数,根据你的排序规则进行排序
sorted()函数有三个参数:
sorted(iterable, key=None, reverse=False)
- iterable(必需):
要排序的可迭代对象(如列表、元组、字符串、集合、字典的键等)。
如果传入的是字典,则默认按字典的键进行排序,除非指定了 key 参数。
- key(可选):
一个函数,用于从每个输入元素中提取一个比较键(例如,根据字符串的长度、列表中元素的某个属性等)。它应该接受一个参数,并返回一个用于排序的值。
例如,你可以使用 key=len 来根据字符串的长度对字符串列表进行排序。对于复杂的排序需求,你可以定义自己的函数作为 key 参数。
- reverse(可选):
一个布尔值,指定排序是升序(False)还是降序(True)。默认为 False(升序)。
示例
正序和倒序排列集合
my_set = {5, 1, 4, 2, 3}
new_set = sorted(my_set)
new_set_reverse = sorted(my_set,reverse=True)
print(f'按照正序排列 {new_set}')
print(f'按照倒序序排列 {new_set_reverse}')
#结果
按照正序排列 [1, 2, 3, 4, 5]
按照倒序序排列 [5, 4, 3, 2, 1]
给定key参数,按照key函数规则排序
1) 给定key=len,根据字符串长度排序
name = ['apple','pea','banana']
sorted_items = sorted(name, key=len)
print(sorted_items)
#结果
['pea', 'apple', 'banana']
2) 给字典的value排序:为了按值排序并获取相应的键值对,通常使用 sorted() 与字典的 items() 或 values() 方法结合
下面给定的key=lambda x: x[1])意思是通过items()获取的键值对元组,通过lambda匿名函数拿到第2个元素,也就是字典的value,然后按照value进行排序。
d = {'a': 3, 'b': 2, 'c': 1, 'd': 4}
sorted_items =dict(sorted(d.items(), key=lambda x: x[1]))
print(sorted_items)
#结果
{'c': 1, 'b': 2, 'a': 3, 'd': 4}
共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”
-----指水滴不断地滴,可以滴穿石头;
-----比喻坚持不懈,集细微的力量也能成就难能的功劳。
----感谢读者的阅读和学习和关注,谢谢大家。