Python基于自定义方法的排序

在Python中,排序是一个常见的任务,它可以帮助我们根据特定的规则对数据结构(如列表)中的元素进行排序。Python的内置排序方法,如列表的sort()函数和内置函数sorted(),提供了非常灵活的排序机制,特别是通过key参数,我们可以指定一个自定义的函数来决定排序的顺序。本文将探讨如何在Python中使用自定义方法来实现排序。

一、基础概念

在Python中,sort()方法会就地修改列表,使其元素按照指定的规则进行排序,而sorted()函数则会返回一个新的列表,原列表保持不变。两者都接受一个可选的key参数,该参数应该是一个函数,用于从每个元素中提取一个用于比较的关键字。

二、自定义排序方法

自定义排序方法通常是通过定义一个函数来实现的,该函数接受列表中的一个元素作为输入,并返回用于排序的关键字。这个关键字可以是元素的一个属性、一个计算结果,或者是对元素进行某种转换后的结果。

示例1:按字典中某个键的值排序

假设我们有一个字典列表,每个字典代表一个人的信息,包含姓名和年龄。我们想要根据年龄对这些人进行排序。

people = [
{'name': 'Alice', 'age': 30},
{'name': 'Bob', 'age': 25},
{'name': 'Charlie', 'age': 35}
] # 使用sorted函数和自定义key
sorted_people = sorted(people, key=lambda x: x['age'])
print(sorted_people)
# 输出: [{'name': 'Bob', 'age': 25}, {'name': 'Alice', 'age': 30}, {'name': 'Charlie', 'age': 35}]

在这个例子中,我们使用了一个lambda函数作为key参数,该函数从字典中提取age键的值作为排序的关键字。

示例2:按字典中某几个键的总值排序

如果我们有一个自定义的类,并且想要根据类的某个属性对类的实例列表进行排序,我们也可以定义一个自定义的排序方法。

students = [
{'name': 'Alice', 'python': 30, 'java': 20, "html": 23},
{'name': 'Bob', 'python': 56, 'java': 32, "html": 21},
{'name': 'Charlie', 'python': 78, 'java': 34, "html": 43}
] # 使用sorted函数和自定义key
sorted_students = sorted(students, key=lambda x: x['python']+x['java']+x['html']) for i in sorted_students:
print(i)
# 输出:
# {'name': 'Alice', 'python': 30, 'java': 20, 'html': 23}
# {'name': 'Bob', 'python': 56, 'java': 32, 'html': 21}
# {'name': 'Charlie', 'python': 78, 'java': 34, 'html': 43}

在这个例子中,我们使用了一个lambda函数作为key参数,该函数从字典中提取pythonjavahtml键的值作为排序的关键字。

三、高级排序

除了基于单个关键字的排序外,Python还允许我们进行更复杂的排序,比如先按一个关键字排序,如果第一个关键字相同,则按第二个关键字排序,依此类推。这可以通过嵌套使用tuple作为key函数的返回值来实现。

示例3:多条件排序

people = [
{'name': 'Charlie', 'age': 25},
{'name': 'Alice', 'age': 25},
{'name': 'Bob', 'age': 25},
] # 假设我们想要先按年龄排序,如果年龄相同,则按姓名排序
sorted_people = sorted(people, key=lambda x: (x['age'], x['name']))
print(sorted_people)
# 输出: [{'name': 'Alice', 'age': 25}, {'name': 'Bob', 'age': 25}, {'name': 'Charlie', 'age': 25}]

Python基于自定义方法的排序的更多相关文章

  1. Python基于比较的排序

    排序是算法学习中最基本的问题. 1.平均时间复杂度均为O(N2)的排序 1.1 插入排序 插入排序对少量元素的排序非常有效.工作机制就像打牌一样,为了将牌插入到已排好序的牌中,需要将牌与手中的牌从右向 ...

  2. 漫谈python中的搜索/排序

    在数据结构那一块,搜索有顺序查找/二分查找/hash查找,而排序有冒泡排序/选择排序/插入排序/归并排序/快速排序.如果遇到数据量和数组排列方式不同,基于时间复杂度的考虑,可能需要用到混合算法.如果用 ...

  3. [python学习] 语言基础—排序函数(sort()、sorted()、argsort()函数)

    python的内建排序函数有 sort.sorted两个. 1.基础的序列升序排序直接调用sorted()方法即可 ls = list([5, 2, 3, 1, 4]) new_ls = sorted ...

  4. Python list列表的排序

    当我们从数据库中获取一写数据后,一般对于列表的排序是经常会遇到的问题,今天总结一下python对于列表list排序的常用方法: 第一种:内建函数sort() 这个应该是我们使用最多的也是最简单的排序函 ...

  5. python基于LeanCloud的短信验证

    python基于LeanCloud的短信验证 1. 获取LeanCloud的Id.Key 2. 安装Flask框架和Requests库 pip install flask pip install re ...

  6. Python基于共现提取《釜山行》人物关系

    Python基于共现提取<釜山行>人物关系 一.课程介绍 1. 内容简介 <釜山行>是一部丧尸灾难片,其人物少.关系简单,非常适合我们学习文本处理.这个项目将介绍共现在关系中的 ...

  7. Python 基于Python实现的ssh兼sftp客户端(上)

    基于Python实现的ssh兼sftp客户端   by:授客 QQ:1033553122 实现功能 实现ssh客户端兼ftp客户端:实现远程连接,执行linux命令,上传下载文件 测试环境 Win7 ...

  8. 给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度为O(N),且要求不能用非基于比较的排序

    题目: 给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度为O(N),且要求不能用非基于比较的排序 public static int maxGap(int nums[]) { if ( ...

  9. Python字典按值排序的方法

    Python字典按值排序的方法: 法1: (默认升序排序,加  reverse = True 指定为降序排序) # sorted的结果是一个list dic1SortList = sorted( di ...

  10. solr特点三: 基于Solr实现排序定制化参考

    排序实现有N种形式,最低成本.最快响应时间是目标 一份索引,支持N种排序策略并且在线互不干扰是要考虑的每一种实现,处理的场景是不同的,不要千篇一律 020排序,从索引到效果,有不少坑,这篇文章没有细说 ...

随机推荐

  1. 移动端自动化之uiautomator2

    github: https://github.com/openatx/uiautomator2 [安装] pip3 install -U uiautomator2# 安装UI Inspector -- ...

  2. Python之pandas读取Excel

    #! -*- coding utf-8 -*- """ 模块功能:读取当前文件夹下的Source里的Excel文件,显示其相关信息 说明:默认把Excel的第一行当做列名 ...

  3. WPF下,控件未响应鼠标属性触发器

    WPF下,控件未响应鼠标属性触发器 记一次自定义控件调试 问题现象 问题分析 解决方式 记一次自定义控件调试 使用WPF写了个自定义控件,其中有个Button按钮,重写了样式模板 <Button ...

  4. building qtqml requires python

    编译Qt5.14.2的qtdeclarative发生错误:building qtqml requires python,系统是ubuntu18.04,安装有python3,修复需要做2步: 1.用na ...

  5. 鸿蒙应用开发从入门到入行 - 篇1:HarmonyOS介绍——带你深入理解鸿蒙特性

    鸿蒙应用开发从入门到入行 第一天 - HarmonyOS介绍 导读:在本篇文章里,您将了解到HarmonyOS是什么,以及有哪些振奋人心的特性.并且猫林老师会在本篇文章里给出结论:鸿蒙必能蚕食安卓份额 ...

  6. MAC清理

    今日分享 Mac清理 有很多三方软件可以清理,以前用过腾讯的柠檬lite,每次就清个几百兆,系统数据感觉还是得自己手动清理才行 今天电脑又在提醒储存空间不足了,一看占用发现系统数据占了100多个G,学 ...

  7. 准备 OpenXML 开发环境

    Development with Open XML 1. 准备开发环境 1.1 Open XML SDK 现在最新的 OpenXML SDK 版本是 2.12.1 (2021/1),需要通过 NuGe ...

  8. 【前端】display:inline-block中间的间隙

    父元素宽度800px 两个并列子元素宽度设为50%,并且使用了display:inline-block 结果一运行,两个元素不在同一行? 我查审元素,两个子元素div的宽度都是400,也没有边框,边距 ...

  9. 【Javaweb】【Js】【Servlet】Js与Servlet交互 - Js请求Servlet与响应Servlet

    [原生JS][POST]请求和响应(一) 虽然效率有点低,但是作为初学者,可以先看看这个,然后再去看后面用Json处理. XMLHttpRequest介绍 XMLHttpRequest 对象用于在后台 ...

  10. MessageConsumer

    @Slf4j @Component public class MessageConsumer { @Autowired private PpcRequestMessageListener ppcReq ...