Python基础教程:序列排序

news2025/1/11 21:09:24

前言

大家早好、午好、晚好吖 ❤ ~欢迎光临本文章

话不多说,直接开搞,如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码

正文

python中,一般在涉及到列表排序时,都用内置的sort()方法或者全局的sorted()方法,区别如下:

  1. sort()方法只能用于列表排序,不能用于字符串,字典等其他可迭代序列;
    sorted()方法可以用于所有的可迭代序列;

  2. sort()方法是在原列表基础上进行排序,返回None,会破坏原始列表结构;
    sorted()方法是返回一个排序后的新序列,对原始列表无影响;

#sort()排序
>>> a=[6,9,8,4,3,1,2]
>>> b=a.sort()
>>> print(b)
None
>>> print(a)
[1, 2, 3, 4, 6, 8, 9]

#sorted()排序
>>> a=[6,9,8,4,3,1,2]
>>> b=sorted(a)
>>> print(b)
[1, 2, 3, 4, 6, 8, 9]
>>> print(a)
[6, 9, 8, 4, 3, 1, 2]

字典排序时,sorted()方法默认是按照字典的键(key)排序的,如下:

>>> a={5:'A',1:'E',4:'B',2:'D',3:'C'}
>>> b=sorted(a)
>>> print(b)
[1, 2, 3, 4, 5]

如果需要按照字典的value排序,可以用下面的方法:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:702813599
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> a={5:'A',1:'E',4:'B',2:'D',3:'C'}
>>> b=sorted(a.items(), key=lambda item:item[1])
>>> print(b)
[(5, 'A'), (4, 'B'), (3, 'C'), (2, 'D'), (1, 'E')]

高级用法

sort()方法和sorted()方法都可以指定参数来处理一些复杂场景的排序

  1. key参数:指定一个函数,可以是内置函数,也可以是自己定义的函数,此函数将在每个元素比较前被调用。

  2. reverse参数:此参数指定True or False,来进行降序或者升序,默认为False(升序)。

如下:

a = ["This", "A", "is", "bag"]
b = sorted(a, key=str.lower)
c = sorted(a, key=str.lower, reverse=True)
print(b)
print(c)

['A', 'bag', 'is', 'This']
['This', 'is', 'bag', 'A']

更广泛的使用情况是用复杂对象的某些值来对复杂对象的序列排序,例如:

一个列表保存着每个学生的姓名,档次和分数

student_tuples = [
    ('john', 'A', 96),
    ('leky', 'D', 63),
    ('andy', 'A', 92),
    ('jane', 'B', 82),
    ('dave', 'B', 85),
    ('cany', 'A', 96)
]

场景1、按档次从高到低进行排序

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:702813599
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
student_tuples = [
    ('john', 'A', 96),
    ('leky', 'D', 63),
    ('andy', 'A', 92),
    ('jane', 'B', 82),
    ('dave', 'B', 85),
    ('cany', 'A', 96)
]
print(sorted(student_tuples, key=lambda student: student[1]))

[('john', 'A', 96), ('andy', 'A', 92), ('cany', 'A', 96), ('jane', 'B', 82), ('dave', 'B', 85), ('leky', 'D', 63)]

场景2、按分数从高到低排序

方法(1)、使用reverse参数

student_tuples = [
    ('john', 'A', 96),
    ('leky', 'D', 63),
    ('andy', 'A', 92),
    ('jane', 'B', 82),
    ('dave', 'B', 85),
    ('cany', 'A', 96),
]
print(sorted(student_tuples, key=lambda student: student[2], reverse=True))

[('john', 'A', 96), ('cany', 'A', 96), ('andy', 'A', 92), ('dave', 'B', 85), ('jane', 'B', 82), ('leky', 'D', 63)]

方法(2)、使用负号(-)

student_tuples = [
    ('john', 'A', 96),
    ('leky', 'D', 63),
    ('andy', 'A', 92),
    ('jane', 'B', 82),
    ('dave', 'B', 85),
    ('cany', 'A', 96),
]
print(sorted(student_tuples, key=lambda student: -student[2]))

[('john', 'A', 96), ('cany', 'A', 96), ('andy', 'A', 92), ('dave', 'B', 85), ('jane', 'B', 82), ('leky', 'D', 63)]

注意:负号(-)只能用于数字前面,不能用于字符串前面

场景3、按档次从低到高进行排序,档次相同的按分数从低到高排序

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:702813599
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
student_tuples = [
    ('john', 'A', 96),
    ('leky', 'D', 63),
    ('andy', 'A', 92),
    ('jane', 'B', 82),
    ('dave', 'B', 85),
    ('cany', 'A', 96)
]
print(sorted(student_tuples, key=lambda student: [student[1], -student[2]],reverse=True))

[('leky', 'D', 63), ('jane', 'B', 82), ('dave', 'B', 85), ('andy', 'A', 92), ('john', 'A', 96), ('cany', 'A', 96)]

场景4、按档次从低到高进行排序,档次相同的按分数从低到高排序,最后再按照姓名升序

姓名是字符串,不能在字符串前面用“符号(-)”来排序,可以重写“富比较”方法

class Reversinator(object):
    def __init__(self, obj):
        self.obj = obj

    def __lt__(self, other):
        return other.obj < self.obj


student_tuples = [
    ('john', 'A', 96),
    ('leky', 'D', 63),
    ('andy', 'A', 92),
    ('jane', 'B', 82),
    ('dave', 'B', 85),
    ('cany', 'A', 96),
]

print(sorted(student_tuples, key=lambda student: [student[1], -student[2], Reversinator(student[0])], reverse=True))

[('leky', 'D', 63), ('jane', 'B', 82), ('dave', 'B', 85), ('andy', 'A', 92), ('cany', 'A', 96), ('john', 'A', 96)]

尾语

好了,今天的分享就差不多到这里了!

对下一篇大家想看什么,可在评论区留言哦!看到我会更新哒(ง •_•)ง

喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!

最后,宣传一下呀~👇👇👇 更多源码、资料、素材、解答、交流 皆点击下方名片获取呀👇👇👇

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

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

相关文章

想要精通算法和SQL的成长之路 - 相交链表

想要精通算法和SQL的成长之路 - 相交链表 前言一. 相交链表&#xff08;双指针&#xff09; 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 相交链表&#xff08;双指针&#xff09; 原题链接 思路如下&#xff1a; 1.我们假设 headA链表的长度为 a。headB链表的长度为b…

算法通关村18关 | 回溯模板如何解决分割回文串问题

1. 分割回文串 题目 LeetCode131 分割回文串&#xff0c;给你一个字符串s&#xff0c;请你将s分割成一些字串&#xff0c;使每个字串都是回文串&#xff0c;返回s所有可能的分割方案。 回文串是正着和反着读都是一样的字符串。 思路 知道回溯的模板&#xff0c;用回溯的角度思…

Ceph入门到精通-ceph对于长文件名如何处理

RADOS object with short name 上一篇博文&#xff0c;我们将介绍了对象相关的数据结构ghobject_t&#xff0c;以及对象在底层文件系统存储的文件名&#xff0c;以及如何从文件名对应到 ghobject_t对象。 映射关系如下图所示&#xff1a; 这里面有一个漏洞&#xff0c;即obje…

云服务器与内网穿透有什么区别?哪个好用?

云服务器与内网穿透有什么区别&#xff0c;哪个好用&#xff1f;如何在自己公网IP云主机上部署搭建P2P穿透&#xff1f;这里给大家汇总介绍一下&#xff0c;供大家共同学习了解。 云服务器的一些特点&#xff1a; 需要数据上云场景时&#xff0c;通常可以选择使用云服务器。 …

JavaScript的内置类

一、认识包装类型 1.原始类型的包装类 JavaScript的原始类型并非对象类型&#xff0c;所以从理论上来说&#xff0c;它们是没有办法获取属性或者调用方法的。 但是&#xff0c;在开发中会看到&#xff0c;我们会经常这样操作&#xff1a; var message "hello world&q…

Android:viewPage+Fragment实现模拟微信首页

一、前言&#xff1a;虽然现在很多已经不这么写了&#xff0c;但是这是最底层的东西&#xff0c;我想我还是要好好理解一下的。这篇代码是模拟微信首页底部按钮和ViewPage的联动。记录一下&#xff01;&#xff01; 二、代码理解&#xff1a; 主页面布局 <?xml version&…

积木报表 JimuReport v1.6.2-GA版本发布—高危SQL漏洞安全加固版本

项目介绍 一款免费的数据可视化报表&#xff0c;含报表和大屏设计&#xff0c;像搭建积木一样在线设计报表&#xff01;功能涵盖&#xff0c;数据报表、打印设计、图表报表、大屏设计等&#xff01; Web 版报表设计器&#xff0c;类似于excel操作风格&#xff0c;通过拖拽完成报…

安防监控/视频汇聚/云存储/AI智能视频分析平台EasyCVR显示CPU过载,该如何解决?

视频云存储/安防监控/视频汇聚平台EasyCVR基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。安防视频监控系统EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、云…

主品牌老化:企业增长面临的关键挑战——《主品牌进化战略》节选

在今天&#xff0c;大部分行业的竞争环境已经从匀速变化迭代为加速变化&#xff0c;主品牌老化成为企业增长面临的重要挑战&#xff0c;这一点已经变得非常明显。技术革新、产业革命以及顾客需求的演变势不可挡&#xff0c;跨周期竞争已经成为常态。在这种情况下&#xff0c;企…

React 展开运算符

0x00 前言 CTF 加解密合集CTF Web合集网络安全知识库溯源相关 文中工具皆可关注 皓月当空w 公众号 发送关键字 工具 获取 0x01 展开运算符 1. 展开数组 <script type"text/javascript">let arr1 [1,3,5,7,9]let arr2 [2,4,6,8,10]console.log(...arr1)&l…

OSPF协议LSDB同步过程和邻居状态机

【微|信|公|众|号&#xff1a;厦门微思网络】 华为HCIA试听课程&#xff1a;网络工程师的基本功&#xff1a;网络地址转换NAT https://mp.weixin.qq.com/s/jJRRSj3EdjFHrXCAqRCVeg 华为HCIP试听课程&#xff1a;华为HCIP必考题&#xff1a;DHCP协议原理与配置https://mp.weixi…

ICC2: ICG clone与ICG merge

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 默认情况下,initial_place阶段或者在spg flow的initial_opt阶段工具会自动merge clock gating cell。但是如果在place_opt之前使用merge_clock_gates命令了,place阶段就不会再merge clock gate了。…

Linux中断底半部机制总结

linux实现底半部的机制主要有tasklet、workqueue、softirq。 1.tasklet tasklet的使用较为简单&#xff0c;它的执行上下文是软中断&#xff0c;所以在tasklet中不能睡眠&#xff0c;它的执行时机通常是中断顶半部返回的时候。我们只需要定义tasklet及其处理函数&#xff0c;…

【管理运筹学】第 7 章 | 图与网络分析(4,最大流问题)

系列文章目录 【管理运筹学】第 7 章 | 图与网络分析&#xff08;1&#xff0c;图论背景以及基本概念、术语、矩阵表示&#xff09; 【管理运筹学】第 7 章 | 图与网络分析&#xff08;2&#xff0c;最小支撑树问题&#xff09; 【管理运筹学】第 7 章 | 图与网络分析&#xf…

健身小程序制作流程详解

随着移动互联网的普及&#xff0c;越来越多的人开始关注健康和健身。为了满足这一需求&#xff0c;制作一款健身小程序已经成为一种趋势。本文将详细介绍如何使用第三方制作平台&#xff0c;如乔拓云网&#xff0c;制作健身小程序&#xff0c;让你轻松成为专家。 一、注册与登录…

CG MAGIC分享3ds Max卡顿未保存处理方法有哪些?

3ds Max进行建模、渲染这一系列过程中&#xff0c;大家使用中都会遇到各种原因导致软件卡顿或崩溃是很常见的情况。 可以说卡机没关系&#xff0c;可是卡顿发生时&#xff0c;如果之前的工作没有及时保存&#xff0c;可能会导致数据的丢失和时间的浪费。这就是最让人烦躁的了&…

Pytorch 多卡并行(1)—— 原理简介和 DDP 并行实践

近年来&#xff0c;深度学习模型的规模越来越大&#xff0c;需要处理的数据也越来越多&#xff0c;单卡训练的显存空间和计算效率都越来越难以满足需求。因此&#xff0c;多卡并行训练成为了一个必要的解决方案本文主要介绍使用 Pytorch 的 DistributedDataParallel&#xff08…

Java开发分布式抽奖系统

Lottery 基于Springboot&#xff0c;Dubbo 等开发的分布式抽奖系统 1. 环境 配置 规范 2. 搭建(DDD RPC)架构 DDD&#xff08;Domain-Driven Design 领域驱动设计&#xff09;是由Eric Evans最先提出&#xff0c;目的是对软件所涉及到的领域进行建模&#xff0c;以应对系统…

阿里云轻量应用服务器为什么便宜?CPU性能差吗?

阿里云轻量应用服务器2核2G3M带宽优惠价108元一年&#xff0c;轻量应用服务器为什么便宜&#xff1f;是因为性能差吗&#xff1f;并不是&#xff0c;轻量应用服务器不限制CPU基准性能&#xff0c;轻量有月流量限制&#xff0c;轻量不支持指定CPU处理器&#xff0c;阿里云轻量2核…

研发效能行业发展趋势及人才认证的重要性丨IDCF

在当今的高科技环境下&#xff0c;“研发效能”已成为企业竞争和发展的关键因素。近年来&#xff0c;随着技术的快速发展&#xff0c;研发效能行业也在不断演进&#xff0c;并且将在未来几年内持续发展。本文将探讨研发效能行业的发展趋势以及人才认证的重要性。 一、研发效能…