Python 序列排序

嗨喽,大家好呀~这里是爱看美女的茜茜呐


👇 👇 👇 更多精彩机密、教程,尽在下方,赶紧点击了解吧~

python源码、视频教程、插件安装教程、资料我都准备好了,直接在文末名片自取就可


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群:261823976
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和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群:261823976
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和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群:261823976
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和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]]))[('john', 'A', 96), ('cany', 'A', 96), ('andy', 'A', 92), ('dave', 'B', 85), ('jane', 'B', 82), ('leky', 'D', 63)]

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

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

class Reversinator(object):def __init__(self, obj):self.obj = objdef __lt__(self, other):return other.obj < self.objstudent_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.mzph.cn/news/88122.shtml

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

相关文章

在 SQL Server 中,可以使用加号运算符(+)来拼接字符串。但是,如果需要拼接多个字符串或表中的字段,就需要使用内置的拼接函数了

以下是 SQL Server 中的一些内置拼接函数&#xff1a; 1. CONCAT&#xff1a;将两个或多个字符串拼接在一起。语法为&#xff1a; CONCAT (string1, string2, ...)示例&#xff1a; SELECT CONCAT(Hello, , World) as combined_string;输出结果为&#xff1a;Hello World&a…

【QandA C++】内存泄漏、进程地址空间、堆和栈、内存对齐、大小端和判断、虚拟内存等重点知识汇总

目录 内存泄漏 内存模型 、进程地址空间 堆和栈的区别 内存对齐 大端小端及判断 虚拟内存有什么作用 内存泄漏 概念: 是指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况, 内存泄漏并不是指内存在物理上的消失, 而是应用程序分配了某段内存后, 因为设计错误…

Docker 安装Redis(集群)

3主3从redis集群配置 1、新建6个docker容器 redis 实例 docker run -d --name redis-node-1 --net host --privilegedtrue -v /data/redis/share/redis-node-1:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6381 docker run -d --name redis-node-2 --ne…

2023 “华为杯” 中国研究生数学建模竞赛(E题)深度剖析|数学建模完整代码+建模过程全解全析

​ 问题一 血肿扩张风险相关因素探索建模 思路&#xff1a; 根据题目要求,首先需要判断每个患者是否发生了血肿扩张事件。根据定义,如果后续检查的血肿体积比首次检查增加≥6 mL或≥33%,则判断为发生了血肿扩张。 具体判断步骤: (1) 从表1中提取每个患者的入院首次影像检查…

Java高级特性-泛型方法

Java高级特性-泛型方法 Java泛型方法是Java语言中的一种特殊方法,它可以在方法中使用泛型类型,从而使方法具有更强的通用性和灵活性。在本文中,我们将介绍Java泛型方法的基本概念、语法和使用方法。 基本概念 Java泛型方法是一种可以在方法中使用泛型类型的方法。泛型类型…

python基础语法

目录 常量和表达式 变量和类型 1.整数int 2.小数float 3.字符串string 4.布尔类型bool 5.动态类型 注释 输入输出 输出 输入 运算符 算术运算符 关系运算符 逻辑运算符 赋值运算符 python和C、Java语法区别 创建一个python项目 常量和表达式 在python中&…

String的增删查【C++】

String的增删查【C】 前言string的增删查改构造与析构构造string(const char* str "")赋值构造string(const string& s1) 赋值重载析构函数增reservepush_backappendinsert 删erase 查迭代器流插入流提取流插入流提取 前言 从这里开始可以算是进入了STL的学习中…

FPGA的设计原则

1.硬件设计原则。设计的代码能让软件推断出你写的是什么电路。 2.同步设计原则。随着系统的增大&#xff0c;系统中不止有一个时钟&#xff0c;各时钟之间要有明确的时序关系。如果时序关系部确定&#xff0c;则认为是异步时钟。比如一个PLL/MMCM输出的两个不同频率时钟认为是同…

【学习笔记】POJ 3834 graph game

点这里 结论题&#x1f605; &#xff0c;图一乐 结论&#xff1a;如果原图中存在两个边集不交的生成树&#xff0c;那么 Bob \text{Bob} Bob必胜&#xff1b;否则 Alice \text{Alice} Alice必胜 证明有点难&#x1f605; 首先&#xff0c;考虑维护两颗 不存在红边 的生成树…

自定义布隆过滤器

import java.util.BitSet; import java.util.Objects;public class MyBloomFilter {//位数组的大小private static final int DEFAULT_SIZE2<<24;//创建6个不同的哈希函数private static final int[] SEEDSnew int[]{3,13,46,71,91,134};//位数组private BitSet bitsnew …

C语言中常见的面试题

解释C语言中的基本数据类型,并举例说明它们的用法和限制。描述C语言中的变量和常量的定义方法,以及它们的作用和区别。解释C语言中的数组和字符串,并说明它们的定义方法和使用注意事项。描述C语言中的循环结构和控制语句,并举例说明它们的用法和限制。解释C语言中的函数和函…

递归与递推

92. 递归实现指数型枚举 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N 16;int n; int st[N];void dfs(int u){if(u>n){for(int i1;i<n;i){if(st[i] 1)printf("%d &quo…

CRM客户管理系统英文专业版

外资公司日常沟通的语言以英文为主&#xff0c;业务往来也是涉及到国内外&#xff0c;专业的英文版CRM系统很适合这样的业务团队&#xff0c;尤其CRM供应商是国际化企业&#xff0c;在海外也有分公司、办事处。 多语言 ZOHO支持多语种如英语、汉语、日语等28种语言&#xff0…

MySQL基础篇-函数

目录 1.字符串函数 2.数值函数 3.日期函数 4.流程函数 5.小结 在MySQL中&#xff0c;函数是一种数据库对象&#xff0c;用于执行特定的操作或计算&#xff0c;并返回结果。函数通常用于查询、数据处理和转换&#xff0c;以及在SQL语句中执行其他操作。MySQL提供了许多内置函…

linux驱动之input子系统简述

文章目录 一、什么是input子系统二、内核代码三、代码分析 一、什么是input子系统 Input驱动程序是linux输入设备的驱动程序&#xff0c;我们最常见的就按键&#xff0c;触摸&#xff0c;插拔耳机这些。其中事件设备驱动程序是目前通用的驱动程序&#xff0c;可支持键盘、鼠标…

Go基础语法:list

概述 container/list包实现了基本的双向链表功能&#xff0c;包括元素的插入、删除、移动功能 链表元素 链表中元素定义如下&#xff1a; type Element struct {Value interface{} }func (e *Element) Next() *Element func (e *Element) Prev() *Element通过Value属性来获…

C++ -- IO流

目录 C语言的输入与输出 CIO流 C标准IO流 C文件IO流 文件常见的打开方式如下 以二进制的形式操作文件 以文本的形式操作文件 读写结构体 stringstream的简单介绍 C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输…

零基础学空手道_3_空手道的站姿(上)

欢迎回来一起学习刚柔流空手道。 讲一些比较严肃的内容&#xff0c;就是礼仪和站姿。 空手道一开始不是要学习怎么打&#xff0c;而是要学习怎么去尊重别人和不打。所以礼仪很重要。 一切事情都是以礼仪开始&#xff0c;以礼仪结束。这叫以理始以理终。 空手道也是这样&#xf…

MySQL - DML数据增删改

功能介绍&#xff1a; DML&#xff08;Data Manipulation Language&#xff09;数据操作语言&#xff0c;用来对数据库中表的数据记录进 行增、删、改操作。 添加数据&#xff08;INSERT&#xff09; 基本语法&#xff1a;insert into 表名(字段列表) values (值列表); …

HTML计时事件(JavaScript)网页电子钟+网页计时器

setTimeout("函数","未来指定毫秒后调用函数"); clearTimeout(setTimeout("函数","未来指定毫秒后调用函数")); <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title>…