Python排序,你用对了吗?一文教你sorted和sort的正确姿势!

目录

1、sorted基础用法 🍏

1.1 列表排序入门

1.2 自定义排序规则

1.3 排序稳定性和key函数

2、sort内置方法操作 🔍

2.1 直接修改原列表

2.2 sort高级技巧与性能考量

2.3 案例:数据预处理实战

2.4 高级用法:reverse与cmp_to_key

3、应对复杂数据结构 🌐

3.1 字典排序依据键或值

3.2 元组列表排序实战

3.3 numpy数组与pandas DataFrame排序

4、高级排序技巧 💡

4.1 多关键字排序

4.2 反向排序与自定义排序类

4.3 利用itemgetter和attrgetter优化性能

5、性能对比与选择策略 ⏱️

5.1 sorted vs sort速度测试

5.2 内存消耗考量

5.3 场景驱动的决策建议

6、总结与展望 🌟



1、sorted基础用法 🍏

1.1 列表排序入门

在Python中,sorted()函数是一种强大而灵活的工具,用于对可迭代对象进行排序,如列表、元组等。它不修改原对象,而是返回一个新的排序后的列表。基础用法相当直接,例如对一个简单的整数列表进行升序排序:

numbers = [5, 9, 1, 4, 3]
sorted_numbers = sorted(numbers)
print(sorted_numbers)  # 输出: [1, 3, 4, 5, 9]

1.2 自定义排序规则

sorted()函数通过key参数允许用户自定义排序规则。这在处理复杂数据结构时尤为有用,比如字典或包含对象的列表。下面例子展示了按字符串长度排序:

words = ["apple", "fig", "banana", "date"]
sorted_words = sorted(words, key=len)
print(sorted_words)  # 输出: ['fig', 'date', 'apple', 'banana']

1.3 排序稳定性和key函数

排序稳定性是指相等元素的原始顺序是否被保留。Python 3.5及以后版本的sorted()默认是稳定的,意味着当比较键相同时 ,原始顺序不会改变。利用key函数可以深入对象属性进行排序,例如在学生对象列表中按成绩排序:

class Student:def __init__(self, name, score):self.name = nameself.score = scorestudents = [Student('Alice', 88), Student('Bob', 95), Student('Charlie', 90)]
sorted_students = sorted(students, key=lambda s: s.score)
for student in sorted_students:print(student.name, student.score)
# 输出: Alice 88, Charlie 90, Bob 95

通过这些示例,我们探索了sorted()函数的基础用法、自定义排序逻辑以及其稳定性特点 ,为处理不同场景下的排序需求提供了坚实的基础。

2、sort内置方法操作 🔍

2.1 直接修改原列表

列表的sort()方法与sorted()函数不同,它直接在原地对列表进行排序,而不创建新的列表。这意味着sort()方法会修改原始列表,但不返回任何值,因此你可能会看到类似None的返回结果。下面是一个基础示例:

numbers = [5, 2, 9, 1, 5, 6]
numbers.sort()
print(numbers)  # 输出: [1, 2, 5, 5, 6, 9]

2.2 sort高级技巧与性能考量

sort()方法同样接受keyreverse参数,允许更复杂的排序逻辑。然而,由于它修改的是原列表 ,所以在处理大量数据或需要保持原始数据不变的情况下,需要谨慎使用。此外,sort()方法的内部实现通常比sorted()更高效,因为它避免了创建新列表的开销。下面展示了一个使用key参数的例子:

words = ["banana", "apple", "cherry", "date"]
words.sort(key=str.lower)
print(words)  # 输出: ['apple', 'banana', 'cherry', 'date']

2.3 案例:数据预处理实战

在实际的数据预处理中,sort()方法经常用来整理数据 ,使其按特定顺序排列。例如,在处理调查问卷的结果时,可能需要按参与者的年龄或性别排序数据,以便后续分析。下面是一个模拟的情境,展示如何使用sort()方法对包含调查对象年龄的列表进行排序:

ages = [22, 34, 26, 29, 31, 23, 30]
ages.sort()
print(ages)  # 输出: [22, 2

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

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

相关文章

递归与分治算法-以高校学生就业管理系统为例

1.递归算法介绍 递归是一种在问题解决过程中自我调用的算法技术。一个递归函数会调用自身来解决问题的一个更小的部分。递归算法通常具有以下特点: 基本情形(Base Case):递归必须有一个或多个基本情形,这样递归调用才…

Yolo系列再次更新——清华发布Yolov10端到端实时对象检测模型

前期我们刚介绍过Yolo系列模型,还以为Yolov9刚刚发布,也许今年不会再有什么更新。但是没有想到打脸如此之快,Yolov10端到端实时对象检测模型强势回归发布。Yolov10端到端实时对象检测 YOLOv10 是清华大学研究人员在YOLO软件包的基础上,引入了一种新的实时目标检测方法,解决…

python excel openpyxl

python excel LTS 在开始之前,确保已经安装了 Python 和所需的库。 主要使用以下库: openpyxl:用于读取和写入 Excel 文件。 pandas:用于数据处理和分析。 xlwings:用于将 Python 与 Excel 连接,实现双向…

从vs中删除自带的Microsoft Git Provider

vs自带的Git Provider非常不好用,每一次在Tools里面把Source Control调节成None, 下一次打开,又是Git Provider Make sure Visual Studio is closedOpen regeditNavigate to HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0_Confi…

HTTP协议格式

目录 正文: 1.概述 2.主要特点 3.请求协议格式 4.响应协议格式 5.响应状态码 总结: 正文: 1.概述 HTTP 协议是用于传输超文本数据(如 HTML)的应用层协议,它建立在传输层协议 TCP/IP 之上。当我们在…

视频参考帧和重构帧复用

1、 视频编码中的参考帧和重构帧 从下图的编码框架可以看出,每编码一帧需要先使用当前帧CU(n)减去当前帧的参考帧CU(n)得到残差。同时,需要将当前帧的重构帧CU*(n)输出,然后再读取重构帧进行预测…

js逆向抠js要点解析与案例分享

JavaScript(JS)逆向工程是一种技术,用于分析和理解JS代码的功能和行为,尤其是在源代码不可用或被混淆的情况下。逆向JS代码可以帮助开发者理解第三方库的工作机制,或者在调试和优化过程中定位问题。 要点一&#xff1…

七、MyBatis-Plus高级用法:最优化持久层开发-个人版

七、MyBatis-Plus高级用法:最优化持久层开发 目录 文章目录 七、MyBatis-Plus高级用法:最优化持久层开发目录 一、MyBatis-Plus快速入门1.1 简介1.2 快速入门回顾复习 二、MyBatis-Plus核心功能2.1 基于Mapper接口CRUDInsert方法Delete方法Update方法Se…

PyQt5中如何实现指示灯点亮和指示灯熄灭功能

一般上位机界面都会涉及指示灯点亮和指示灯熄灭功能,从网上下载该功能的上位机界面,学习如何使用PyQt5搭建具备指示灯点亮和指示灯熄灭效果的界面。 1. 上位机界面的效果展示 使用PyQt5实现以下界面,界面效果如下,界面图片是从网…

基于SpringBoot的招聘信息管理系统的详细设计和实现(源码+lw+部署文档+讲解等,欢迎咨询我!!)

文章目录 目录 文章目录 详细视频展示: 系统具体实现效果(看看我的实力) 技术栈(详细的描述提供给同学思路参考) 2.1 Java语言介绍 2.2 B/S架构 2.3 MySQL 数据库介绍 2.4 MySQL环境配置 2.5 SpringBoot框…

C++之static关键字

文章目录 前提正文多重定义extern关键字使用staticstatic 全局变量(在.cpp文件中定义)static变量存放在哪里static变量可不可以放在.h文件中 static 函数static局部变量static 成员变量static 成员函数 总结参考链接 前提 好吧,八股,我又回来了。这次想…

[图解]企业应用架构模式2024新译本讲解23-标识映射2

1 00:00:00,950 --> 00:00:02,890 好,我们往下走 2 00:00:04,140 --> 00:00:04,650 一样的 3 00:00:04,660 --> 00:00:07,170 这前面也见过了,定义一个对象数组 4 00:00:07,870 --> 00:00:12,820 数组的长度就是字段的数量,4个…

中值滤波法

中值滤波法 中值滤波法:连续采样N次(N取奇数),把N次采样值按大小排列,取中间值为本次有效值。 优点:能有效克服因偶然因素引起的波动干扰;对温度、液位的变化缓慢的被测参数有良好的滤波效果。 缺点:对流量、速度等快速变化的参数不宜。 #include <stdio.h> #i…

一.1.(3)半导体二极管基本电路的分析方法及常见应用电路

1.二极管基本电路的分析方法 先标正负极&#xff0c;再看是否理想二极管 将二极管视为断路&#xff0c;求两端电压 两端电压均大于导通电压&#xff0c;压差大的先导通&#xff08;由于电源不是完全的阶跃&#xff0c;而是有一个电压爬升的过程&#xff09; 2.常见应用电路 1.求…

【redis】redis知识点学习目录整理及简介

1、Redis概述 作者往期博文链接&#xff1a; 1、【redis】redis概述-CSDN博客 2、【redis】redis经典面试题20连问-CSDN博客 Redis定义&#xff1a;Redis是一个开源的、高性能的、基于内存运行的、非关系型的键值对NoSQL数据库。特点&#xff1a; 数据存储在内存中&#xf…

centos修改时间:系统时间、硬件时间

在CentOS上&#xff0c;修改时间可以通过以下步骤进行&#xff0c;涵盖系统时间和硬件时间&#xff08;RTC&#xff1a;Real-Time Clock&#xff09;。 系统时间是操作系统内核维护的时间硬件时间是系统主板上的时钟芯片维护的时间。 1. 修改系统时间 使用 date 命令来修改系…

c语言------------------分支结构

#语句 ## 空语句 c语言中最简单的语句就是空语句&#xff0c;其本身只包含一个分号。空语句本身不执行任何任务&#xff0c;但是有时也是有用的 ## 表达式语句 c语言中的语句本质上就是程序员的某些操作意图的体现。C语言中的单句是以分号结尾&#xff0c; 如&#xff1a…

日期选取限制日期范围antdesign vue

限制选取的日期范围 效果图 <a-date-pickerv-model"dateTime"format"YYYY-MM-DD":disabled-date"disabledDate"valueFormat"YYYY-MM-DD"placeholder"请选择日期"allowClear />methods:{//回放日期选取范围限制&…

网安小贴士(4)哈希函数

一、前言 哈希函数是密码学中的基础工具&#xff0c;哈希函数在密码学中扮演着至关重要的角色&#xff0c;广泛应用于确保数据的安全性和完整性。随着技术的发展&#xff0c;新的哈希算法和应用场景也在不断出现。 二、定义 哈希函数是一种数学函数&#xff0c;它接受一个输…

Intellj idea无法启动

个人电脑上安装的是2024.01版本的intellj idea作为开发工具&#xff0c;引入了javaagent作为工具包 但是在一次invaliad cache操作后&#xff0c;intellj idea就无法启动了&#xff0c;双击无响应。 重装了idea后也无效&#xff08;这个是有原因的&#xff0c;下面会讲&#…