Python可迭代对象排序:深入排序算法与定制排序

99a119fd55cf0be2366af0dd58b77b56.jpeg

更多Python学习内容:ipengtao.com

排序在计算机科学中是一项基础而关键的操作,而Python提供了强大的排序工具来满足不同场景下的排序需求。本文将深入探讨Python中对可迭代对象进行排序的方法,涵盖基础排序算法、sorted函数的应用、以及定制排序规则和实际应用场景。

基础排序算法

首先,介绍Python中常用的排序算法,包括冒泡排序、插入排序、选择排序等。

冒泡排序

def bubble_sort(arr):n = len(arr)for i in range(n - 1):for j in range(0, n - i - 1):if arr[j] > arr[j + 1]:arr[j], arr[j + 1] = arr[j + 1], arr[j]# 示例
numbers = [64, 34, 25, 12, 22, 11, 90]
bubble_sort(numbers)
print("冒泡排序结果:", numbers)

插入排序

def insertion_sort(arr):for i in range(1, len(arr)):key = arr[i]j = i - 1while j >= 0 and key < arr[j]:arr[j + 1] = arr[j]j -= 1arr[j + 1] = key# 示例
numbers = [64, 34, 25, 12, 22, 11, 90]
insertion_sort(numbers)
print("插入排序结果:", numbers)

选择排序

def selection_sort(arr):for i in range(len(arr)):min_index = ifor j in range(i + 1, len(arr)):if arr[j] < arr[min_index]:min_index = jarr[i], arr[min_index] = arr[min_index], arr[i]# 示例
numbers = [64, 34, 25, 12, 22, 11, 90]
selection_sort(numbers)
print("选择排序结果:", numbers)

sorted函数的应用

Python的内置函数sorted提供了一种简便而高效的排序方式。

对数字列表排序

numbers = [64, 34, 25, 12, 22, 11, 90]
sorted_numbers = sorted(numbers)
print("排序后的数字列表:", sorted_numbers)

对字符串列表排序

fruits = ["apple", "banana", "cherry", "date", "elderberry"]
sorted_fruits = sorted(fruits, key=len)
print("按字符串长度排序后的水果列表:", sorted_fruits)

定制排序规则

在实际应用中,经常会遇到需要基于复杂规则进行排序的情况。学习如何使用key函数来指定排序规则,以及如何利用lambda表达式和函数对象实现更灵活的定制排序。

对复杂对象进行定制排序

class Student:def __init__(self, name, age, grade):self.name = nameself.age = ageself.grade = gradestudents = [Student("Alice", 21, 85),Student("Bob", 20, 90),Student("Charlie", 22, 80)
]sorted_students = sorted(students, key=lambda x: x.grade, reverse=True)
print("按成绩降序排序后的学生列表:", [student.name for student in sorted_students])

多级排序

class Product:def __init__(self, name, price, rating):self.name = nameself.price = priceself.rating = ratingproducts = [Product("Laptop", 1200, 4.5),Product("Mouse", 20, 4.2),Product("Monitor", 300, 4.7)
]# 先按价格升序,再按评分降序排序
sorted_products = sorted(products, key=lambda x: (x.price, -x.rating))
print("按价格升序、评分降序排序后的产品列表:", [product.name for product in sorted_products])

复杂对象的排序

处理包含多个属性的复杂对象是排序中的常见任务。通过示例,将演示如何在排序过程中考虑对象的多个属性,以及如何实现多级排序。

class Student:def __init__(self, name, age, grade):self.name = nameself.age = ageself.grade = gradestudents = [Student("Alice", 21, 85),Student("Bob", 20, 90),Student("Charlie", 22, 80)
]# 按年龄升序,年龄相同时按成绩降序排序
sorted_students = sorted(students, key=lambda x: (x.age, -x.grade))
print("按年龄升序、成绩降序排序后的学生列表:")
for student in sorted_students:print(f"Name: {student.name}, Age: {student.age}, Grade: {student.grade}")

实际应用场景

数据分析中的排序

import pandas as pddata = {"Name": ["Alice", "Bob", "Charlie"],"Age": [25, 22, 30],"Salary": [50000, 60000, 45000]}df = pd.DataFrame(data)
sorted_df = df.sort_values(by=["Salary", "Age"], ascending=[False, True])
print("按工资降序、年龄升序排序后的数据框:")
print(sorted_df)

多个条件的文件排序

import globfiles = glob.glob("*.txt")
sorted_files = sorted(files, key=lambda x: (len(x), x))
print("按文件名长度升序、字典序升序排序后的文件列表:", sorted_files)

总结

在本文中,我们分享了Python中对可迭代对象进行排序的多种方法和应用场景。首先,通过介绍基础排序算法,提供了排序操作的基础知识。随后,通过sorted函数,展示了一种简便而高效的排序工具,覆盖了对基本类型和复杂对象的排序操作。特别是对于复杂对象,演示了如何利用key参数以及多级排序规则实现灵活的排序需求。

通过实际应用场景的探讨,展示了排序在数据分析、文件处理等领域的实际应用。在数据分析中,使用了Pandas库进行列排序,而在文件处理中,展示了如何按照文件名长度和字典序对文件进行排序。这些实际案例帮助读者更好地理解排序在不同领域中的实际应用价值。

综合而言,排序是计算机科学中一个基础而重要的操作,而Python提供的丰富工具使得排序变得更加灵活和高效。通过学习本文,不仅能够掌握排序的基本原理和算法,还能够在实际项目中运用排序的各种技巧,提高代码的可读性和执行效率。排序作为程序中常见的操作之一,对于数据整理和处理起着至关重要的作用。

如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!

更多Python学习内容:ipengtao.com

干货笔记整理

  100个爬虫常见问题.pdf ,太全了!

Python 自动化运维 100个常见问题.pdf

Python Web 开发常见的100个问题.pdf

124个Python案例,完整源代码!

PYTHON 3.10中文版官方文档

耗时三个月整理的《Python之路2.0.pdf》开放下载

最经典的编程教材《Think Python》开源中文版.PDF下载

774ef72aa6048b477da60d5b8a36cdf1.png

点击“阅读原文”,获取更多学习内容

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

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

相关文章

x-www-form-urlencoded的含义解释,getReader()和getParameter()的区别

1、x-www-form-urlencoded x-www-form-urlencoded是一种编码格式&#xff0c;它是一种常见的编码方式&#xff0c;用于在HTTP请求中 传输表单数据 。在这种编码方式下&#xff0c;表单数据被编码为URL格式&#xff0c;然后作为请求体&#xff08;payload&#xff09;发送。 需要…

《尚品甄选》:后台系统——结合redis实现用户登录

文章目录 一、统一结果实体类二、统一异常处理三、登录功能实现四、CORS解决跨域五、图片验证码六、登录校验功能实现6.1 拦截器开发6.2 拦截器注册 七、ThreadLocal 要求&#xff1a; 用户输入正确的用户名、密码以及验证码&#xff0c;点击登录可以跳转到后台界面。未登录的用…

【信息隐藏】信息隐藏基础

00 学习资源 0.1 推荐书籍 1.多媒体安全基础导论 复旦大学出版社 蓝皮&#xff1b; 2.隐写学原理与技术&#xff08;赵险峰&#xff09;科学出版社 蓝皮 0.2 视频课程 南开大学-信息隐藏技术&#xff08;没看&#xff09; 0.3 代码资源 GitHub一位phd&#xff1a;https:/…

JDBC编程方法及细节

JDBC&#xff08;Java Database Connectivity&#xff09;是Java编程语言用于连接和操作数据库的API&#xff08;Application Programming Interface&#xff09;。它为开发人员提供了一组Java类和接口&#xff0c;用于与各种关系型数据库进行通信。使用JDBC&#xff0c;开发人…

点大商城V2.5.3分包小程序端+小程序上传提示限制分包制作教程

这几天很多播播资源会员反馈点大商城V2.5.3小程序端上传时提示大小超限&#xff0c;官方默认单个包都不能超过2M&#xff0c;总分包不能超20M。如下图提示超了93KB&#xff0c;如果出现超的不多情况下可采用手动删除一些images目录下不使用的图片&#xff0c;只要删除超过100KB…

git提交报错error: failed to push some refs to ‘git url‘

1.产生错误原因 想把本地仓库提交到远程仓库&#xff0c;报错信息如下 git提交报错信息 error: src refspec master does not match any error: failed to push some refs to git url 错误原因&#xff1a; 我们在创建仓库的时候&#xff0c;都会勾选“使用Reamdme文件初始化…

发送一个网络数据包的过程解析

在 ip_queue_xmit 中&#xff0c;也即 IP 层的发送函数里面&#xff0c;有三部分逻辑。第一部分&#xff0c;选取路由&#xff0c;也即我要发送这个包应该从哪个网卡出去。 这件事情主要由 ip_route_output_ports 函数完成。接下来的调用链为&#xff1a;ip_route_output_port…

apipost接口200状态码,浏览器控制台500状态码

后端 url 登录login方法 login(){this.$refs.loginForm.validate(async valid > {if (!valid) return// 由于data属性是一个json对象&#xff0c;需要进行解构赋值{data:result}&#xff0c;进行状态码判断const {data: result} await this.$http.post(/api/doLogin,this.…

《使用Python将Excel数据批量写入MongoDB数据库》

在数据分析及处理过程中&#xff0c;我们经常需要将数据写入数据库。而MongoDB作为一种NoSQL数据库&#xff0c;其具有强大的可扩展性、高性能以及支持复杂查询等特性&#xff0c;广泛用于大规模数据存储和分析。在这篇文章中&#xff0c;我们将使用Python编写一个将Excel数据批…

老牌开源 SVG 编辑器 SVGEdit 是如何架构的?

大家好&#xff0c;我是前端西瓜哥。这次简单看看 SVGEdit 的架构。 SVGEdit 的版本为 7.2.0。 SVGEdit 一款非常老牌的 SVG 图形编辑器&#xff0c;用于编辑处理 SVG&#xff0c;start 数目前是 5.8k。 它的优点在于经过多年的开发&#xff0c;完成度高&#xff0c;较为成熟&a…

javascript判断是否是json格式

文章目录 一、问题二、解决三、总结3.1、定义 一、问题 工作中有用到JSON.parse这个来解析JSON字符串&#xff0c;这个时候突然有一次遇到JSON字符串是长串数字或数字字符串&#xff0c;主要是自己也没兼容好&#xff0c;就导致了一长串数字JSON.parse之后变成了e24等数字。主…

基于孔雀算法优化概率神经网络PNN的分类预测 - 附代码

基于孔雀算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于孔雀算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于孔雀优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络的光滑…