专业编程基础技术教程

网站首页 > 基础教程 正文

python内置函数reversed()和sorted()我们需要知道的区别

ccvgpt 2024-07-26 00:56:13 基础教程 10 ℃

在Python中,reversed() 和 sorted() 是两个用于处理序列(如列表、元组,字典的key/value等)的内置函数,当然它们的功能和用途也有明显的区别。

区别

  1. 功能:reversed() 是反转有序序列的顺序(如果对无序序列排序会报错,比如无序的字典和集合),而 sorted() 对有序或者无序序列都可进行排序(不光是反转排序,可指定不同的排序方式)。
  2. 返回值类型:reversed() 返回一个迭代器,而 sorted() 返回一个列表list
  3. 原始序列:两者都不会改变原始序列。
  4. 参数:两者都接受一个可迭代对象作为参数。而sorted() 还可以接受额外的参数,如 key 和 reverse,用于定制排序行为。
  5. 性能:对于大型数据集,由于 reversed() 只是简单地反转迭代器的方向,因此通常比 sorted()(它需要执行排序算法)更快。但是,如果你需要排序的数据,那么 sorted() 是必需的。
  6. 用途:reversed() 通常用于需要反向迭代序列的场景,而 sorted() 用于需要按特定顺序(通常是升序或降序)处理序列元素的场景。

reversed()功能

reversed() 函数返回一个反转的迭代器,它不会改变原始序列,该迭代器按相反的顺序展示原始序列中的元素。

python内置函数reversed()和sorted()我们需要知道的区别

示例

反转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)

  1. iterable(必需):

要排序的可迭代对象(如列表、元组、字符串、集合、字典的键等)。

如果传入的是字典,则默认按字典的键进行排序,除非指定了 key 参数。

  1. key(可选):

一个函数,用于从每个输入元素中提取一个比较键(例如,根据字符串的长度、列表中元素的某个属性等)。它应该接受一个参数,并返回一个用于排序的值。

例如,你可以使用 key=len 来根据字符串的长度对字符串列表进行排序。对于复杂的排序需求,你可以定义自己的函数作为 key 参数。

  1. 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}


共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”

-----指水滴不断地滴,可以滴穿石头;

-----比喻坚持不懈,集细微的力量也能成就难能的功劳。

----感谢读者的阅读和学习和关注,谢谢大家。

最近发表
标签列表