一文弄懂Python中的sort和sorted函数

news2025/6/17 12:57:17

1. 引言

Python中的 sort()sorted()函数主要用于按升序或降序对数据进行排序。在本文中比较用于列表时,两个函数在编程和语法上的差异。

闲话少说,我们直接开始吧!

2. Sort()函数基本用法

用于列表排序的sort函数的语法如下:

list.sort(reverse=False, key=None)

用法如下:

  • 参数reverse:默认为False。如果reverse=True,则数据将按降序排列。
  • 参数key: 默认为None。我们可以指定一个用户定义的函数来自定义排序。

2.1 样例一之基本排序

我们首先尝试使用上述默认参数来看个事例,样例代码如下:

# Original List
typ_data = ['$', '45', '3j+5', 'Hello']
print(f'Original Data: {typ_data}')

# Sorting the list
typ_data.sort()
# Printing sorted list
print(f'Sorted Data: {typ_data}')

----------
Original Data: ['$', '45', '3j+5', 'Hello']
Sorted Data: ['$', '3j+5', '45', 'Hello']

可以知道上述结果按照字符串首字符的ASCII码进行升序排序。

2.2 样例二之用户自定义排序函数

有时间我们需要按照用户自定义的函数来对列表进行排序,相应的代码示例如下:

# List containing dictionary data
data = [
    {'fruit': 'strawberry', 'price': 100},
    {'fruit': 'banana', 'price': 91},
    {'fruit': 'mango', 'price': 132},
    {'fruit': 'cherry', 'price': 82},
]

print(f'Original Data: {data}')

# Function for sorting by key 'price'
def sort_dict_by_price(item):
    return item['price']

# Sorting data using the user-defined sorting function
data.sort(key=sort_dict_by_price)
print('-'*20)
# Printing the data
print(f'Sorted Data: {data}')

运行结果如下:

Original Data: [{'fruit': 'strawberry', 'price': 100}, {'fruit': 'banana', 'price': 91}, {'fruit': 'mango', 'price': 132}, {'fruit': 'cherry', 'price': 82}]
--------------------
Sorted Data: [{'fruit': 'cherry', 'price': 82}, {'fruit': 'banana', 'price': 91}, {'fruit': 'strawberry', 'price': 100}, {'fruit': 'mango', 'price': 132}]

上述代码中,我们通过编写一个名为sort_dict_by_price的函数,它接受我们的字典本身作为输入,并返回键“price”的值。将此函数已传递给函数sort的参数key,该参数将根据价格按升序对数据进行排序。

3. Sorted()函数基本用法

用于列表排序的sorted函数的语法如下:

sorted(iterable, key=None, reverse=False)

用法如下:

  • 参数iterable: 必需。输入任何可迭代数据
  • 参数key: 默认为“None”。指定排序条件。
  • 参数reverse: 默认为False。当设置为True时,数据将按降序排列。

3.1 样例一之基本排序

Python中的sorted()函数用于对可迭代数据进行排序。默认情况下,此函数按升序对数据进行排序。

我们当然也可以使用sorted函数来对各种类型的数据进行排序,样例代码如下:

list_data = [43, 21, 2, 34]
print(f'Sorted List: {sorted(list_data)}')

# Seperator
print('-'*20)

tuple_data = (('x', 3), ('w', 1), ('1', 4))
print(f'Sorted Tuple: {sorted(tuple_data)}')

# Seperator
print('-'*20)

dict_data = {9: 'G', 1: 'V', 4: 'E'}
print(f'Sorted Dictionary Keys: {sorted(dict_data)}')
print(f'Sorted Dictionary Values: {sorted(dict_data.values())}')
print(f'Sorted Dictionary Items: {sorted(dict_data.items())}')

结果如下:

Sorted List: [2, 21, 34, 43]
--------------------
Sorted Tuple: [('1', 4), ('w', 1), ('x', 3)]
--------------------
Sorted Dictionary Keys: [1, 4, 9]
Sorted Dictionary Values: ['E', 'G', 'V']
Sorted Dictionary Items: [(1, 'V'), (4, 'E'), (9, 'G')]

3.2 样例二之用户自定义排序函数

我们同样也可以通过将自定义排序函数传递给函数sorted()来实现相应的排序功能,举例如下:

# Tuple data
tuple_data = (
    ('Mango', 25),
    ('Walnut', 65),
    ('Cherry', 10),
    ('Apple', 68),
)

print(f'Original: {tuple_data}')
# Separator
print('-'*20)

# Function for grabbing 2nd item from the data
def sorting_tup_data(item):
    return item[1]

# Sorting based on sorting criteria in descending order
sorting = sorted(tuple_data, key=sorting_tup_data, reverse=True)
print(f'Sorted: {sorting}')

结果如下:

Original: (('Mango', 25), ('Walnut', 65), ('Cherry', 10), ('Apple', 68))
--------------------
Sorted: [('Apple', 68), ('Walnut', 65), ('Mango', 25), ('Cherry', 10)]

上述代码中,由于在传递自定义函数时使用了参数key,因此元组是根据第二项进行排序的;同样由于我们将参数reverse设置为True,此时输出的数据是按降序排序输出的。

4. 总结

我们已经看到了用于列表中的sort()sorted()函数的对比,同样我们给出了相应的代码示例,进而了解这些函数是如何工作的。简而言之,这两个函数都用于对数据进行排序,但函数sort()只对Python列表进行排序,而sorted()函数用于对可迭代数据进行排序。

对以上进行总结如下:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/411923.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java equals和==的区别

目录一、equals1.前言2.重写equals方法二、三、equals和的区别一、equals 1.前言 **当用equals来比较两个引用数据类型时默认比较的是它们的地址值,比如创建两个成员变量完全相同对象A和对象B两个进行比较,比较的是两个对象的地址值是否相等&#xff0c…

从spring boot泄露到接管云服务器平台

0x1前言 在打野的时候意外发现了一个站点存在spring boot信息泄露,之前就有看到一些文章可以直接rce啥的,今天刚好试试。通过敏感信息发现存在accesskey泄露,就想直接通过解密,获取敏感信息,接管云平台。 首先说下这个…

Linux服务器如何清除dns缓存

Linux服务器如何清除dns缓存 DNS缓存是一个临时数据库,用于存储已解释的DNS查询信息。换句话说,每当你访问网站时,你的操作系统和网络浏览器都会保留域名和相应IP地址的记录。 这消除对远程DNS服务器重复查询,并允许你的操作系统…

【实验报告】实验三、图像复原

1. 实验目的 (1) 理解退化模型。 (2) 掌握常用的图像复原方法。 2. 实验内容 (1) 模拟噪声的行为和影响的能力是图像复原的核心。 (2) 空域滤波 实验一 1. 1 产生至少 2 种不同类型的噪声,并绘制原图像、加噪后图像及对应直方图于 一个图形窗口中[subplot(m…

用GPT-4写代码不用翻墙了?Cursor告诉你:可以~~

目录 一、介绍 二、使用方法 三、其他实例 1.正则表达式 2.自动化测试脚本 3.聊聊技术 一、介绍 Cursor主要功能是根据用户的描述写代码或者进行对话,对话的范围仅限技术方面。优点是不用翻墙、不需要账号。Cursor基于GPT模型,具体什么版本不祥&#…

ChatGPT文本框再次升级,打造出新型操作系统

在ChatGPT到来之前,没有谁能够预见。但是,它最终还是来了,并引起了不小的轰动,甚至有可能颠覆整个行业。 从某种程度上说,ChatGPT可能是历史上增长最快的应用程序,仅在两个多月就拥有了1亿多活跃用户&…

2023年4月企业内部定制课程简章

2023年4月企业内部定制课程简章 》》数据治理内训 数据管理基础 数据处理伦理 数据治理 数据架构 数据建模和设计 数据安全 数据集成和互操作 文件和内容管理 参考数据和主数据 数据仓库和商务智能 元数据管理 数据质量 大数据和数据科学 数据管理成熟度评估 数据管理组织与…

js基础之Promise(全面+手写实现)

1. 是什么 Promise是一种异步编程的解决方案,用于处理异步操作并返回结果。 主要作用是解决回调函数嵌套(回调地狱)的问题,使异步操作更加清晰、易于理解和维护。 2. 怎么用 Promise有三种状态:pending(…

(大数据开发随笔8)Hadoop 3.3.x分布式环境部署——补充知识

索引克隆虚拟机SSH免密登录ssh简介免密登录scp命令时间同步克隆虚拟机 克隆:注意要分开放置三个虚拟机的位置 修改克隆机的ip地址 vi /etc/sysconfig/network-scripts/ifcfg-ens33——IPADDR重启网络 systemctl restart networkip addr 查看ip地址 修改克隆机的主…

【STM32学习】直接存储器访问——DMA

【STM32学习】直接存储器访问——DMA零、参考一、对DMA的理解二、DMA通道优先级三、DMA通道x传输数量寄存器(DMA_CNDTRx)四、DMA缓冲区设计零、参考 一个严谨的STM32串口DMA发送&接收(1.5Mbps波特率)机制 【组件】通用环形缓冲区模块 上述是我的参考…

ServletContext 对象

1.共享数据 ServletContext 对象 先调用对象,获取对象,往里面存数据 package com.kuang.servlet;import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.…

Pandas.read_excel详解

文章目录基础知识语法参数详解-index_col参数详解-header参数详解-usecols参数详解-dtype其他参数多表读取顺带提一句如何用pandas写数据到excel基础知识 pandas 可以读取多种的数据格式,针对excel来说,可以使用read_excel()读取数据,如下&a…

实现在SpringBoot项目中使用腾讯云发送短信

在一些项目中总会不可避免的要用到短信服务,比如发送验证码等,那么如何进行短信的发送呢,我们这就来捋一捋,我这里采用的是腾讯云的短信服务。其他的云服务也大致一样。 第一步、申请腾讯云的短信服务并配置基本信息 首先进入腾讯…

2023年Q1京东大家电销售数据分析(京东行业大盘销量查询)

2023年第一季度,大家电线上市场的涨势有点放缓,相较于去年的涨幅,今年有收敛不少。下面,我们以京东平台的数据作为线上市场表现的参考。 根据鲸参谋数据显示,今年Q1季度大家电在京东的累计销量超过1600万件&#xff0c…

FE_CSS 页面布局之盒子模型 边框 内外边距

1 盒子模型(Box Model)组成 所谓 盒子模型:就是把 HTML 页面中的布局元素看作是一个矩形的盒子,也就是一个盛装内容的容器。 CSS 盒子模型本质上是一个盒子,封装周围的 HTML 元素,它包括:边框、…

用户体验设计之记忆(Memory)

🔥人类记忆的基础 记忆是能够记住过去的经历,以及回忆和唤起它们去影响当下的能力 记忆是由encoding(把外界刺激进入大脑转换成可以记忆的格式)、storage(在大脑中开辟存储记忆的空间)、retrieval&#x…

C语言文件操作复习回顾(1)

关于流,内存数据读写铺垫的复习 打开一个文件 -> 内存里面就会创建一个对应关联的文件信息区 -> 文件信息区其实就是一个FILE类型的结构体 -> 各个结构体成员记录了该文件的种种信息 -> 结构体(文件信息区)由FILE* 结构体指针来维护 -> 有了指针&am…

Linux -- 基础IO

文章目录1. 基础认识2. 回顾C文件接口2.1 现象一2.2 现象二2.3 fprintf()函数回顾2.4 fnprintf()函数使用2.5 "a"模式3. 系统接口3.1 open()和close()3.2 write()3.3 read()3.4 C文件接口和系统接口关系3.5 文件描述符3.6 深度理解Linux下一切皆文件3.7 FILE是什么3.…

OpenAI的ChatGPT迭代速度超乎想象

OpenAI的ChatGPT迭代速度超乎想象,被谷歌聊天机器人Bard 嘲笑“家里不通网”后,OpenAI一个鲤鱼打挺甩出“实时联网”方案。 美西时间3月23日,OpenAI宣布推出ChatGPT Plugins(插件集),赋予ChatGPT实时更新、…

chatGPT文章生成插件-用chatGPT写文章接入网站

chatGPT文章生成插件 ChatGPT是一种强大的自然语言生成技术,可以用于生成文章、文本摘要、对话生成、语言翻译等多种应用场景。在实际应用中,可以使用一些插件来实现ChatGPT的文章生成功能,以下是一些可能有用的插件介绍: AI Wri…