Python中如何实现列表的排序

在Python中,实现列表(List)的排序是一项基础且常用的操作。Python提供了多种方式来对列表进行排序,包括使用内置函数、方法以及自定义排序逻辑。下面将详细探讨Python中实现列表排序的多种方法,包括sort()方法、sorted()函数、以及利用lambda函数和functools.cmp_to_key()函数来自定义排序逻辑。

1. 使用sort()方法

sort()是列表(List)的一个方法,它会直接修改原列表,使其元素按照指定的顺序排列。默认情况下,sort()方法会按照元素的升序进行排序,但你可以通过指定参数来改变排序的行为。

基本用法
my_list = [3, 1, 4, 1, 5, 9, 2]
my_list.sort()
print(my_list) # 输出: [1, 1, 2, 3, 4, 5, 9]
指定排序方向
  • reverse=True 表示降序排序。
my_list = [3, 1, 4, 1, 5, 9, 2]
my_list.sort(reverse=True)
print(my_list) # 输出: [9, 5, 4, 3, 2, 1, 1]
自定义排序逻辑

sort()方法接受一个key参数,该参数可以是一个函数,用于从列表的每个元素中提取一个用于比较的关键字。

# 按绝对值排序
my_list = [3, -1, 4, -1, 5, -9, 2]
my_list.sort(key=abs)
print(my_list) # 输出: [1, -1, 2, 3, 4, 5, -9] 注意,负数会被移到正数前面,因为先比较绝对值再比较原始值
# 使用lambda函数按字符串长度排序
words = ["banana", "apple", "cherry", "date"]
words.sort(key=lambda x: len(x))
print(words) # 输出: ['date', 'apple', 'banana', 'cherry']

2. 使用sorted()函数

sort()方法不同,sorted()是一个内置函数,它会返回一个新的列表,原列表不会被修改。sorted()函数的使用方式与sort()方法非常相似,包括参数和自定义排序逻辑。

基本用法
my_list = [3, 1, 4, 1, 5, 9, 2]
sorted_list = sorted(my_list)
print(sorted_list) # 输出: [1, 1, 2, 3, 4, 5, 9]
print(my_list) # 输出: [3, 1, 4, 1, 5, 9, 2],原列表未变
指定排序方向
my_list = [3, 1, 4, 1, 5, 9, 2]
sorted_list = sorted(my_list, reverse=True)
print(sorted_list) # 输出: [9, 5, 4, 3, 2, 1, 1]
自定义排序逻辑

sort()方法相同,sorted()函数也接受一个key参数用于自定义排序逻辑。

# 使用lambda函数按字符串长度排序
words = ["banana", "apple", "cherry", "date"]
sorted_words = sorted(words, key=lambda x: len(x))
print(sorted_words) # 输出: ['date', 'apple', 'banana', 'cherry']

3. 自定义排序逻辑进阶

在某些情况下,你可能需要更复杂的排序逻辑,比如根据元组的多个字段进行排序,或者需要自定义比较函数。Python提供了灵活的方式来满足这些需求。

根据元组的多个字段排序
# 假设有一个学生列表,每个学生是一个包含姓名和分数的元组
students = [("John", 88), ("Anna", 92), ("Peter", 78), ("Linda", 92)]
# 按分数降序排序,如果分数相同则按姓名升序排序
sorted_students = sorted(students, key=lambda x: (-x[1], x[0]))
print(sorted_students)
# 输出可能是 [('Anna', 92), ('Linda', 92), ('John', 88), ('Peter', 78)]
# 注意分数前的负号表示按分数降序排序
使用functools.cmp_to_key()自定义比较函数

从Python 3开始,cmp()函数被移除,但functools模块提供了cmp_to_key()函数,允许你将传统的比较函数转换为key函数,以便与sort()sorted()一起使用。

from functools import cmp_to_key
# 自定义比较函数
def compare(item1, item2):
if item1[1] < item2[1]: # 按分数升序比较
return -1
if item1[1] > item2[1]:
return 1
return 0
students = [("John", 88), ("Anna", 92), ("Peter", 78), ("Linda", 92)]
sorted_students = sorted(students, key=cmp_to_key(compare))
print(sorted_students) # 输出: [('Peter', 78), ('John', 88), ('Anna', 92), ('Linda', 92)]

4. 性能考虑

在大多数情况下,sort()方法和sorted()函数的性能差异不大,因为它们在底层实现上非常相似。然而,如果你需要保留原列表不变,那么使用sorted()函数可能是更好的选择,因为它会返回一个新的列表。另外,自定义排序逻辑(特别是使用复杂的key函数或比较函数)可能会对性能产生一定影响,特别是在处理大型列表时。

结论

Python提供了多种灵活且强大的方式来实现列表的排序,包括sort()方法和sorted()函数。通过指定排序方向、使用key参数进行自定义排序逻辑,以及利用lambda函数和functools.cmp_to_key()函数,你可以轻松地对列表进行排序以满足各种需求。了解并掌握这些排序方法,对于编写高效、易读的Python代码至关重要。

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

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

相关文章

linux入门到实操-1 Linux概述、诞生过程、发行版本,如何安装?

教程来源&#xff1a;B站视频BV1WY4y1H7d3 3天搞定Linux&#xff0c;1天搞定Shell&#xff0c;清华学神带你通关_哔哩哔哩_bilibili 整理汇总的课程内容笔记和课程资料&#xff0c;供大家学习交流下载&#xff1a;夸克网盘分享 本文内容为完整笔记的入门篇 概述部分历史内容…

使用LSTM(长短期记忆网络)模型预测股票价格的实例分析

一&#xff1a;LSTM与RNN的区别 LSTM&#xff08;Long Short-Term Memory&#xff09;是一种特殊的循环神经网络&#xff08;RNN&#xff09;架构。LSTM是为了解决传统RNN在处理长序列数据时遇到的梯度消失或梯度爆炸问题而设计的。 在传统的RNN中&#xff0c;信息通过隐藏状…

linux-用户与权限管理-组管理

在 Linux 系统中&#xff0c;用户、组与权限管理是保障系统安全的重要机制。用户和组的管理不仅涉及对系统资源的访问控制&#xff0c;还用于权限的分配和共享。组管理在 Linux 中尤其重要&#xff0c;它能够帮助管理员组织用户并为不同的组分配特定权限&#xff0c;从而控制用…

使用虚拟信用卡WildCard轻松订阅POE:全面解析平台功能与订阅方式

POE&#xff08;Platform of Engagement&#xff09;是一个由Quora推出的人工智能聊天平台&#xff0c;汇集了多个强大的AI聊天机器人&#xff0c;如GPT-4、Claude、Sage等。POE提供了一个简洁、统一的界面&#xff0c;让用户能够便捷地与不同的AI聊天模型进行互动。这种平台的…

基于SpringBoot的社团管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于JavaSpringBootVueMySQL的社团管理系统【附源码文档】、…

HashTable哈希表

概念 散列表(Hash Table)&#xff0c;又称哈希表。是一种数据结构&#xff0c;特点是:数据元素的关键字与其存储地址直接相关 在顺序结构以及树型结构中&#xff0c;数据元素的关键字与其存储位置没有对应的关系&#xff0c;因此在查找一个元素时&#xff0c;必须要经过关键码…

Windows 平台安装 Nacos 2.x

环境准备 64 位操作系统&#xff0c;Windows 10 / Linux Centos 7JDK 1.8 安装包下载 安装包下载官方地址&#xff1a;https://github.com/alibaba/nacos/releases 启动 将安装包解压到安装的目录下&#xff0c;改名为 nacos-2.0.4。然后进行到 bin 目录下&#xff0c;打开…

软件测试服务公司出具第三方软件测试报告流程和周期简析

随着信息技术的飞速发展&#xff0c;软件已成为各行各业不可或缺的重要工具。然而&#xff0c;软件的质量直接影响到企业的效率和用户体验&#xff0c;因此&#xff0c;软件测试服务的重要性日益凸显。软件测试服务公司&#xff0c;顾名思义&#xff0c;就是专门提供专业的软件…

fpga系列 HDL:全连接层的浮点数加法器FADD实现

32 位 float 型的二进制存储 在fpga系列 HDL:全连接层的浮点数乘法器FM实现中已经提到过32 位 float 型的二进制存储结构。 32 位 f l o a t 型数 V ( − 1 ) S ∗ M ∗ 2 E 32 位 float 型数V(-1)^S*M*2^E 32位float型数V(−1)S∗M∗2E Layer 1 22 0 1 0 1 0 0 0 0 0 0 0 0…

工业机器人9公里远距离图传模块,无人机低延迟高清视界,跨过距离限制

在科技日新月异的今天&#xff0c;无线通信技术正以未有的速度发展&#xff0c;其中&#xff0c;图传模块作为连接现实与数字世界的桥梁&#xff0c;正逐步展现出其巨大的潜力和应用价值。今天&#xff0c;我们将聚焦一款引人注目的产品——飞睿智能9公里远距离图传模块&#x…

LiveKit的agent介绍

概念 LiveKit核心概念&#xff1a; Room&#xff08;房间&#xff09;Participant&#xff08;参会人&#xff09;Track&#xff08;信息流追踪&#xff09; Agent 架构图 ​ 订阅信息流 ​ agent交互流程 客户端操作 加入房间 房间创建方式 手动 赋予用户创建房间的…

JavaScript - Api学习 Day03 (日期对象、节点操作、两种定时器、本地存储)

文章目录 一、日期对象1.1 实例化1.2 日期对象方法 二、节点操作2.1 父子兄弟节点1. 父节点查找2. 子节点查找3. 兄弟关系查找 2.2 增删节点1. 创建节点 - createElement2. 添加节点2.1 appendChild() 方法2.2 insertBefore() 方法2.3. 克隆节点 - cloneNode 3. 删除节点3.1 re…

[数据集][目标检测]抽烟检测数据集VOC+YOLO格式22559张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;22559 标注数量(xml文件个数)&#xff1a;22559 标注数量(txt文件个数)&#xff1a;22559 标…

408算法题leetcode--第一天

参考 参考题单 1523. 在区间范围内统计奇数数目 1523. 在区间范围内统计奇数数目思路&#xff1a;数据量有 1 0 9 10^9 109&#xff0c;所以遍历求解会超时&#xff1b;而(low, high)区间中的奇数 (0, high) - (0, low - 1)的奇数时间和空间复杂度&#xff1a;O(1) class …

flink中slotSharingGroup() 的详解

在 Apache Flink 中&#xff0c;slotSharingGroup() 是一个用于控制算子&#xff08;operator&#xff09;之间资源共享的机制。它允许多个算子共享相同的 slot&#xff08;即资源容器&#xff09;。Slot 是 Flink 中的资源单位&#xff0c;slot 共享可以提高资源利用率&#x…

VisualStudio环境搭建C++

Visual Studio环境搭建 说明 C程序编写中&#xff0c;经常需要链接头文件(.h/.hpp)和源文件(.c/.cpp)。这样的好处是&#xff1a;控制主文件的篇幅&#xff0c;让代码架构更加清晰。一般来说头文件里放的是类的申明&#xff0c;函数的申明&#xff0c;全局变量的定义等等。源…

echarts图 图例跑上面去了 不在右边

legend 中缺少 "right": "1%", "top": "center",

PyTorch----模型运维与实战

一、PyTorch是什么 PyTorch 由Facebook开源的神经网络框架&#xff0c;专门针对 GPU 加速的深度神经网络&#xff08;DNN&#xff09;编程。 二、PyTorch安装 首先确保你已经安装了GPU环境&#xff0c;即Anaconda、CUDA和CUDNN 随后进入Pytorch官网​​​​​​PyTorch 官…

【机器学习】高斯网络的基本概念和应用领域以及在python中的实例

引言 高斯网络&#xff08;Gaussian Network&#xff09;通常指的是一个概率图模型&#xff0c;其中所有的随机变量&#xff08;或节点&#xff09;都遵循高斯分布 文章目录 引言一、高斯网络&#xff08;Gaussian Network&#xff09;1.1 高斯过程&#xff08;Gaussian Proces…

细说STM32F407通用定时器的基础知识

目录 一、通用定时器功能概述 二、细说2通道定时器的功能 1.时钟信号和触发控制器 2.时基单元工作原理 (1)计数寄存器(CNT) (2)预分频寄存器(PSC) (3)自动重载寄存器(ARR) (4)时基单元的控制位 3.捕获/比较通道 三、生成PWM波 1.生成PWM波的原理 2.与生成PWM波相关的HA…