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,一经查实,立即删除!

相关文章

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

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

HTTP协议格式

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

视频参考帧和重构帧复用

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

七、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个…

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

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

日期选取限制日期范围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;下面会讲&#…

springboot服务启动读取不到application.yml中的nacos.config信息

我的版本&#xff1a; 可以添加bootstrap.yml文件&#xff0c;在里面添加nacos.config的配置信息 也可以添加VM参数 -Dspring.cloud.nacos.discovery.server-addr -Dspring.cloud.nacos.config.server-addr -Dspring.cloud.nacos.config.namespace -Dspring.cloud.nacos.discov…

代码随想录——划分字母区间(Leetcode763)

题目链接 贪心 class Solution {public List<Integer> partitionLabels(String s) {int[] count new int[27];Arrays.fill(count,0);// 统计元素最后一次出现的位置for(int i 0; i < s.length(); i){count[s.charAt(i) - a] i;}List<Integer> res new Ar…

【基于R语言群体遗传学】-4-统计建模与算法(statistical tests and algorithm)

之前的三篇博客&#xff0c;我们对于哈代温伯格遗传比例有了一个全面的认识&#xff0c;没有看的朋友可以先看一下前面的博客&#xff1a; 群体遗传学_tRNA做科研的博客-CSDN博客 1.一些新名词 &#xff08;1&#xff09;Algorithm: A series of operations executed in a s…

【MySQL】锁(黑马课程)

【MySQL】锁 0. 锁的考察点1. 概述1. 锁的分类1.1 属性分类1.2 粒度分类 2. 全局锁2.1 全局锁操作2.2.1 备份问题 3. 表级锁3.1 附录 0. 锁的考察点 1. 概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中&#xff0c;除传统的计算资源(CPU、RAM、I/O)的争…

MatLab三维图形绘制基础

三维图形绘制 三维曲线 plot3 螺旋图绘制 % %三维图像:螺旋图绘制 clear; clc; t [0:0.1:10*pi];% 向量 x sin(t) t.*cos(t);%t是向量&#xff0c;用点乘 y cos(t) - t.*sin(t); z t; plot3(x,y,z); grid on;plot3 绘制同型矩阵 %% % plot3绘制同型矩阵 t [0:0.1:10*…

Python统计实战:时间序列分析之二阶曲线预测和三阶曲线预测

为了解决特定问题而进行的学习是提高效率的最佳途径。这种方法能够使我们专注于最相关的知识和技能&#xff0c;从而更快地掌握解决问题所需的能力。 &#xff08;以下练习题来源于《统计学—基于Python》。请在Q群455547227下载原始数据。&#xff09; 练习题 下表是某只股票…

每周算法:无向图的双连通分量

题目链接 冗余路径, Redundant Paths G 题目描述 为了从 F F F 个草场中的一个走到另一个&#xff0c;奶牛们有时不得不路过一些她们讨厌的可怕的树。 奶牛们已经厌倦了被迫走某一条路&#xff0c;所以她们想建一些新路&#xff0c;使每一对草场之间都会至少有两条相互分离…

vue3 + 百度地图 实现多坐标生成轨迹的两种种方式

本次依然是关于百度地图中常见的一个问题&#xff0c;此次共使用了两种方式并做了一些分析及处理&#xff0c;希望有所帮助。如有问题可以评论或私信。 一、便捷方式 优点&#xff1a;便捷&#xff0c;所用的api方法是根据坐标进行计算后绘制路线&#xff0c;所以路线相对准确…