Python中排序函数sorted的用法

Python中排序函数sorted的用法

列表对象提供了sort()方法支持原地排序,而内置函数sorted()返回新列表,并不对原列表进行任何修改。
sorted()方法可以对列表、元组、字典、range对象等进行排序。
列表的sort()方法和内置函数sorted()都支持key参数实现复杂排序要求。
下面讲解排序函数sorted的用法,该函数可以对列表、元组、字典、集合排序,返回一个列表。

1. 一维列表(元组或集合)排序

(1) 一维列表排序

# 一维列表(元组或集合)排序
list1 = [12, 5, 3, 20, 17, 25, 10, 30]
a = sorted(list1)  # 默认升序排序,返回列表
print(a)
b = sorted(list1, reverse=True)  # 降序排序
print(b)
set1 = {12, 5, 3, 20, 17, 25, 10, 30}
c = sorted(set1)  # 返回的都是列表
print(c)
[3, 5, 10, 12, 17, 20, 25, 30]
[30, 25, 20, 17, 12, 10, 5, 3]
[3, 5, 10, 12, 17, 20, 25, 30]

(2) lambda函数

lambda函数是匿名函数,即不需要函数名,格式为 lambda 参数列表:表达式,表达式表示函数要执行的操作。
对于非常简单的函数,或排序时的参数key,通常使用匿名函数实现。
例如:求解a+b,普通函数和匿名函数的写法。

def add(a, b):  # 普通函数return a+b
print(add(2,3))
add = lambda a, b: a + b   # 匿名函数
print(add(2,3))
5
5

(3) 把所有奇数都放到前面,偶数都放到后面

# 一维整数列表,把所有奇数都放到前面,偶数都放到后面
list1 = [19, 32, 76, 82, 23, 63, 38, 50, 20, 30, 39, 14, 19, 50, 81, 27, 77, 12, 55, 29]
a = sorted(list1, key=lambda x: x%2 == 0)
print(a)
[19, 23, 63, 39, 19, 81, 27, 77, 55, 29, 32, 76, 82, 38, 50, 20, 30, 14, 50, 12]

2. 二维列表排序

(1) 第二层是列表、元组或集合

# 二维列表(第二层是列表、元组或集合)排序
list2 = [('Sun', 18), ('Li', 20), ('Zhao', 17), ('Qian', 21), ('Qian', 20)]
# 本题中,匿名函数的参数x,相当与列表中的一个元素,该元素是列表,可以用下标表示列表中的值
# x[0]是姓氏,x[1]是年龄
a = sorted(list2, key=lambda x:x[0])  # 按姓氏升序排序
print(a)
b = sorted(list2, key=lambda x:x[1])  # 按年龄升序排序
print(b)
# 多关键字排序
c = sorted(list2, key=lambda x:(x[0], x[1]))  # 按姓氏升序排序,姓氏相等时按年龄升序排序
print(c)
d = sorted(list2, key=lambda x:(x[0], -x[1]))  # 按姓氏升序排序,姓氏相等时按年龄降序排序
print(d)
[('Li', 20), ('Qian', 21), ('Qian', 20), ('Sun', 18), ('Zhao', 17)]
[('Zhao', 17), ('Sun', 18), ('Li', 20), ('Qian', 20), ('Qian', 21)]
[('Li', 20), ('Qian', 20), ('Qian', 21), ('Sun', 18), ('Zhao', 17)]
[('Li', 20), ('Qian', 21), ('Qian', 20), ('Sun', 18), ('Zhao', 17)]

(2) 第二层是字典

# 二维列表(第二层是字典)排序
list3 = [{'name': 'Dong', 'age': 37}, {'name': 'Zhang', 'age': 40}, {'name': 'Li', 'age': 50}, {'name': 'Dong', 'age': 43}]
# 本题中,匿名函数的参数x,相当与列表中的一个元素,该元素是字典,可以用键做为下标表示字典中的值
# x['name']是名字,x['age']是年龄
a = sorted(list3, key=lambda x:x['name'])  # 按名字升序排序
print(a)
b = sorted(list3, key=lambda x:x['age'])  # 按年龄升序排序
print(b)
# 多关键字排序
c = sorted(list3, key=lambda x:(x['name'],x['age']))  # 按名字升序排序,名字相等时按年龄升序排序
print(c)
d = sorted(list3, key=lambda x:(x['name'],-x['age']))  # 按名字升序排序,名字相等时按年龄降序排序
print(d)
[{'name': 'Dong', 'age': 37}, {'name': 'Dong', 'age': 43}, {'name': 'Li', 'age': 50}, {'name': 'Zhang', 'age': 40}]
[{'name': 'Dong', 'age': 37}, {'name': 'Zhang', 'age': 40}, {'name': 'Dong', 'age': 43}, {'name': 'Li', 'age': 50}]
[{'name': 'Dong', 'age': 37}, {'name': 'Dong', 'age': 43}, {'name': 'Li', 'age': 50}, {'name': 'Zhang', 'age': 40}]
[{'name': 'Dong', 'age': 43}, {'name': 'Dong', 'age': 37}, {'name': 'Li', 'age': 50}, {'name': 'Zhang', 'age': 40}]

3. 字典排序

(1) 字典及其items()排序

# 字典排序
dict1 = {'Sun': 18, 'Li': 20, 'Zhao': 17, 'Qian': 20, 'Chen': 20}
a = sorted(dict1)  # 默认按键升序排序,返回键的列表
print(a)
# 如果对字典按键或者值进行排序,可以对其items()排序
# items()字典的键值对,排序方法类似二维列表
dict1_items = dict1.items()
print(dict1_items)
b = sorted(dict1.items(), key=lambda x:x[0])  # 按键升序排序,返回键值对列表
print(b)
c = sorted(dict1.items(), key=lambda x:x[1])  # 按值升序排序,返回键值对列表
print(c)
d = sorted(dict1.items(), key=lambda x:(x[1], x[0]))  # 按值升序排序,值相同时,按键升序,返回键值对列表
print(d)
['Chen', 'Li', 'Qian', 'Sun', 'Zhao']
dict_items([('Sun', 18), ('Li', 20), ('Zhao', 17), ('Qian', 20), ('Chen', 20)])
[('Chen', 20), ('Li', 20), ('Qian', 20), ('Sun', 18), ('Zhao', 17)]
[('Zhao', 17), ('Sun', 18), ('Li', 20), ('Qian', 20), ('Chen', 20)]
[('Zhao', 17), ('Sun', 18), ('Chen', 20), ('Li', 20), ('Qian', 20)]

(2) 根据另外一个列表的值来对当前列表元素进行排序

# 根据另外一个列表的值来对当前列表元素进行排序,例如,根据年龄列表对姓名列表排序
list1 = ['Sun', 'Li', 'Zhao', 'Qian', 'Chen']  # 姓名
list2 = [18, 20, 17, 20, 20]               # 年龄
pairs = zip(list1, list2)  # 先用zip转成序对,当然也可以继续把序对转成列表或字典
a = sorted(pairs, key=lambda x:(x[1], x[0]))  # 按年龄升序排序,年龄相同时,按姓名升序,返回序对列表
print(a)
b = [x[0] for x in a]  # 按年龄排序后的名字序列
print(b)
[('Zhao', 17), ('Sun', 18), ('Chen', 20), ('Li', 20), ('Qian', 20)]
['Zhao', 'Sun', 'Chen', 'Li', 'Qian']

(3) 字典最大键

# 字典最大键
dict1 = {'Sun': 18, 'Li': 20, 'Zhao': 17, 'Qian': 20, 'Chen': 20}
max_key = max(dict1)  # 字典最大的键(键是字符串类型,按字典序最大)
print(max_key)  
print(dict1[max_key])  # 字典最大的键对应的值
max_key_val = max(dict1.items(), key=lambda x:(x[1], x[0]))  # 字典最大的值对应的键值对,值相同时,取键最大的,返回键值对
print(max_key_val)  
Zhao
17
('Qian', 20)

4. 使用itemgetter实现排序

# 除了匿名函数,还可以导入itemgetter,调用第几项
from operator import itemgetterdict1 = {'Sun': 18, 'Li': 20, 'Zhao': 17, 'Qian': 20, 'Chen': 20}
a = sorted(dict1.items(), key=itemgetter(0))  # 按键升序排序,返回键值对列表
print(a)
b = sorted(dict1.items(), key=itemgetter(1))  # 按值升序排序,返回键值对列表
print(b)
c = sorted(dict1.items(), key=itemgetter(1,0))  # 按值升序排序,值相同时,按键升序,返回键值对列表
print(c)
d = sorted(dict1.items(), key=lambda x:(x[1], x[0]))  # 按值升序排序,值相同时,按键升序,返回键值对列表,与上面方法等效
print(d)
[('Chen', 20), ('Li', 20), ('Qian', 20), ('Sun', 18), ('Zhao', 17)]
[('Zhao', 17), ('Sun', 18), ('Li', 20), ('Qian', 20), ('Chen', 20)]
[('Zhao', 17), ('Sun', 18), ('Chen', 20), ('Li', 20), ('Qian', 20)]
[('Zhao', 17), ('Sun', 18), ('Chen', 20), ('Li', 20), ('Qian', 20)]

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

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

相关文章

Linux安全--为Nginx加上PHP解析功能

yum install php-fpm -y安装php进程管理器 找到Nginx安装的路径 编辑Nginx配置文件

数学建模【主成分分析】

一、主成分分析简介 主成分分析(Principal Component Analysis,PCA)是一种降维算法,它能将多个指标转换为少数几个主成分,这些主成分是原始变量的线性组合,且彼此之间互不相关,其能反映出原始数…

【element-ui】el-table表格高亮选中

highlight-current-row 是否要高亮当前行 <el-tableref"singleTable"highlight-current-rowcurrent-change"handleCurrentChange"></el-table>修改高亮行的颜色 .current-row {background-color: pink; }由current-change事件来管理选中时触发…

基于springboot的家庭装修报价系统设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 相关技术 3 1.1 SpringBoot框架 3 1.2 ECharts 3 1.3 Vue框架 3 1.4 Bootstrap框架 3 1.5 JQuery技术 4 1.6 Ajax技术 4 1.7 本章小结 4 2 系统分析 5 2.1 需求分析 5 2.2 非功能需求 7 2.3 本章小结 8 3 系统设计 9 3.1 系统总体设计 9 …

【能力素质模型建立】某大型国有能源公司能力素质模型项目纪实

【客户评价】 我们之前挑选过很多家做管理咨询的企业&#xff0c;经过多家企业的竞标&#xff0c;我们最终选择了北京华恒智信人力资源顾问有限公司&#xff0c;因为在竞标中我们看到了贵公司的专业性和敬业精神。 在项目合作中&#xff0c;贵公司的多位咨询老师也表现出了高…

快速使用transformers的pipeline实现各种深度学习任务

目录 引言 安装 情感分析 文本生成 文本摘要 图片分类 实例分割 目标检测 音频分类 自动语音识别 视觉问答 文档问题回答 图文描述 引言 在这篇中文博客中,我们将深入探讨使用transformers库中的pipeline()函数,它为预训练模型提供了一个简单且快速的推理方法。…

frida:hook所有方法

标题&#xff1a;frida&#xff1a;hook所有方法 在Android逆向工程中&#xff0c;Frida是一个强大的动态代码插桩工具&#xff0c;能够帮助我们实时hook和调试目标应用的方法。本文将通过一个实际案例&#xff0c;探讨在使用Frida Hook测试应用中的Utils类时遇到的一个JavaSc…

LeetCode100 刷题记录

文章目录 矩阵相关1. 旋转矩阵2. 搜索二维矩阵 矩阵相关 1. 旋转矩阵 题目描述&#xff1a; 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵…

Android JNI复杂用法,回调,C++中调用Java方法

Android JNI复杂用法&#xff0c;回调&#xff0c;C中调用Java方法 一、前言 Android JNI的 普通用法估计很多人都会&#xff0c;但是C中调用Java方法很多人不熟悉&#xff0c;并且网上很多介绍都是片段的。 虽然C/C调用Java不常用&#xff0c;但是掌握多一点还是有好处的。…

【C++杂货铺】详解string

目录 &#x1f308;前言&#x1f308; &#x1f4c1; 为什么学习string &#x1f4c1; 认识string&#xff08;了解&#xff09; &#x1f4c1; string的常用接口 &#x1f4c2; 构造函数 &#x1f4c2; string类对象的容量操作 &#x1f4c2; string类对象的访问以及遍历操…

js判断页面是否是在iframe里面

文章目录 一、前言1.1、_blank跳转1.2、_self跳转 二、方法2.1、判断子项目是否是在iframe内部2.2、实现_self跳转 三、最后 一、前言 上面是父前端项目里的iframe加载了子前端项目的页面。此时如果点击子项目的内容&#xff0c;如果要进行父项目浏览器页面跳转&#xff0c;可以…

C++初阶 类(上)

目录 1. 什么是类 2. 如何定义出一个类 3. 类的访问限定符 4. 类的作用域 5. 类的实例化 6. 类的大小 7. this指针 1.this指针的引出 2. this指针的特性 8. 面试题 1. 什么是类 在C语言中&#xff0c;不同类型的数据集合体是结构体。为了方便管理结构体&#xff0c;我…

HarmonyOS NEXT应用开发案例——自定义TabBar

介绍 本示例主要介绍了TabBar中间页面如何实现有一圈圆弧外轮廓以及TabBar页签被点击之后会改变图标显示&#xff0c;并有一小段动画效果。 效果图预览 使用说明&#xff1a; 依次点击tabBar页面&#xff0c;除了社区图标之外&#xff0c;其它图标往上移动一小段距离。 实现…

中霖教育:消防工程师报考条件汇总

消防工程师考试报名条件汇总&#xff0c;想要参加考试的考生可以根据自己的专业和学历判断自己是否符合条件。 1、大专学历&#xff0c;消防工程专业&#xff0c;工作年限满6年&#xff0c;从事消防安全技术工作满4年;消防工程相关专业&#xff0c;工作年限满7年&#xff0c;从…

实习记录课程内容

2024年3月1日18:21:09 第二周周五——方法篇 等量关系的构造 初中数学中&#xff0c;让学生构造等量关系的数学原理主要包括以下几个方面&#xff1a; 等式的性质&#xff1a;等式的两边同时加上或减去同一个数&#xff0c;等式仍然成立&#xff1b;等式的两边同时乘以或除以…

利用API接口进行竞品价格监控

在电子商务和零售行业&#xff0c;了解竞争对手的定价策略对于保持市场竞争力至关重要。随着技术的发展&#xff0c;通过编程接口&#xff08;API&#xff09;获取商品详情成为企业监控竞品价格的有效手段。本文将详细介绍如何利用API接口实现竞品价格监控的流程和策略。 第一步…

EventSource数据一次性出来

基于txt/event-stream的EventSource流&#xff0c;使用代理时需注意&#xff1a; 开发阶段如果使用vue自带的代理&#xff0c;需要关闭compress&#xff0c;即 devServer: {proxy: {/xx: {target: ip,changeOrigin: true,pathRewrite: {^/xx: /xx}},},compress: false}再nginx部…

浅谈字典攻击

一、前言 字典攻击是一种常见的密码破解方法&#xff0c;它使用预先编制的字典文件作为攻击字典&#xff0c;通过尝试猜测密码的方式来破解密码。下面是一个关于字典攻击的博客&#xff0c;希望能够为您了解字典攻击提供帮助。 二、字典攻击概述 字典攻击是一种密码破解方法&…

文献学习-14-一种用于高精度微创手术的纤维机器人

Authors: Mohamed E. M. K. Abdelaziz1,2 †, Jinshi Zhao1,3 †, Bruno Gil Rosa1,2 , Hyun-Taek Lee4 , Daniel Simon3,5 , Khushi Vyas1,2 , Bing Li6,7 , Hanifa Koguna3 , Yue Li1 , Ali Anil Demircali3 , Huseyin Uvet8 , Gulsum Gencoglan9,10, Arzu Akcay11,12, Moham…

CDR(CorelDRAW)2024最新汉化注册补丁包下载

CorelDRAW 2024是一款功能强大的平面设计软件&#xff0c;广泛应用于图形设计、编辑照片以及创建网站等领域。凭借对高级操作系统的支持、多监视器查看和4K显示屏的兼容性&#xff0c;它让初始用户、图形专家、小型企业主和设计爱好者都能自信快速地交付专业级结果。 CorelDRA…