当前位置: 首页 > news >正文

python sorted函数详解2023.9.11

sorted函数详解

  • 1. 输入和输出
  • 2. key传入函数

1. 输入和输出

help(sorted)

Help on built-in function sorted in module builtins:
sorted(iterable, /, *, key=None, reverse=False)Return a new list containing all items from the iterable in ascending order.A custom key function can be supplied to customize the sort order, and thereverse flag can be set to request the result in descending order.

sorted函数是一个python内置函数,就Python3.9.16来说,函数输入:(iterable, /, *, key=None, reverse=False)

  • iterable :任何可迭代的对象(字符串、列表、元组、字典等)
  • /: / 不代表任何参数,实际调用时该位置不用传值,它仅指示前面的都是位置参数,无需且不能进行关键字参数。
  • *:*出现在函数参数中第一种含义可以表示为可变参数,一般写作*args;对于单独出现在参数中的*参数,则表示,*后面的参数必须为关键字参数的形式.
  • key:A custom key function can be supplied to customize the sort order。接收一个函数来实现自定义的排序
  • reverse:the reverse flag can be set to request the result in descending order. reverse=False表示不用反转,正常数数(升序1234…),reverse=True表示需要反转,倒数(降序10987…)。

PS: 在python3.8之后函数参数中允许出现/和*号。

sorted函数输出:和输入类型相同的新的可迭代对象。

2. key传入函数

分析示例1:

# 创建包含姓名和成绩的列表
pairs = [("Alice", 85), ("Bob", 92), ("Charlie", 77), ("David", 92), ("Eve", 85)]# 使用sorted函数进行排序,首先按成绩排序,然后按姓名字母顺序排序
sorted_pairs = sorted(pairs, key=lambda x: (-x[1], x[0]))# 打印排序后的结果
for name, score in sorted_pairs:print(f"{name}: {score}")

  先回顾lambda python语法lambda [arg1 [,arg2,.....argn]]:expression:匿名函数声明lambda,冒号前是输入参数,冒号后是表达式。PS: 语法中方括号只是用来表示参数列表的可选性,表明它们不是必需的部分。

# lambda 输入参数:表达式,实现将输入参数带入表达式并返回表达式的值这一函数功能
lambda x, y: x*y			# 函数输入是x和y,输出是它们的积x*y
lambda:None					# 函数没有输入参数,输出是None
lambda *args: sum(args)		# 输入是任意个数参数,输出是它们的和(隐性要求输入参数必须能进行算术运算)
lambda **kwargs: 1			# 输入是任意键值对参数,输出是1

  在深入了解一下sorted机理,key所表示函数只能返回可比较值,sorted会默认按照key所表示函数的返回值进行升序排列。但是如果返回值是一个元组时元组的第一个元素是用于排序的标准,第二个元素是用于次要排序的标准。 具体来说,就是按照元组的第一个元素进行升序排序,然后如果第一个元素相同时,按照元组的第二个元素进行升序排序。

来回忆一下Python的变量,可比较值会加粗:

整数(int):用于表示整数值,比如 42 或 -10。
浮点数(float):用于表示带有小数部分的数值,比如 3.14 或 -0.25。
字符串(str):用于表示文本数据,比如 ‘Hello, World!’ 或 “Python”。逐字符比较

可迭代变量都是先比较第一个元素,挨个继续的,先终止迭代的认为是小的。

布尔值(bool):用于表示逻辑值,只有两个可能的值,True 和 False。False 小于 True。
列表(list):用于表示有序的可变序列,可以包含不同类型的元素。
元组(tuple):用于表示有序的不可变序列,也可以包含不同类型的元素。
集合(set):用于表示无序的、唯一的元素集合。
字典(dict):用于表示键值对的集合,每个键对应一个值。

尽管默认情况下迭代一个字典将返回字典的键。但一般认为字典无法直接迭代键值对,需要用使用字典的 .keys()、.values() 或 .items() 方法来迭代键、值或键值对。

NoneType(None):用于表示缺少值或空对象。
自定义对象(自定义类):可以创建的类和对象,这些对象具有自定义的属性和方法。

sorted函数在构建时考虑了排序稳定性,即当多个记录具有相同的键值时,将保留其原始顺序。

data = [('red', 1), ('blue', 1), ('red', 2), ('blue', 2)]
sorted(data, key=itemgetter(0))  # 按照key进行排序,blue>red,因为ASCLL表中b>r
>>[('blue', 1), ('blue', 2), ('red', 1), ('red', 2)]

这说明如果第一个元素排序完,相同的值顺序不会变,这是相同的值可以通过key返回为元组时的第二个元素进行次要排序控制的基础。

相关文章:

python sorted函数详解2023.9.11

sorted函数详解 1. 输入和输出2. key传入函数 1. 输入和输出 help(sorted) Help on built-in function sorted in module builtins: sorted(iterable, /, *, keyNone, reverseFalse)Return a new list containing all items from the iterable in ascending order.A custom k…...

Spring Reactive:响应式编程与WebFlux的深度探索

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...

Qt应用开发(基础篇)——工具按钮类 QToolButton

一、前言 QToolButton类继承于QAbstractButton,该部件为命令或选项提供了一个快速访问按钮,通常用于QToolBar中。 按钮基类 QAbstractButton QToolButton是一个特殊的按钮,一般显示文本,只显示图标,结合toolBar使用。它…...

【数据结构面试题】栈与队列的相互实现

目录 1.队列实现栈 1.1创建栈 1.2判断是否为空 1.3入栈 1.4出栈 1.5获取栈顶元素 1.6完整代码 2. 用栈实现队列 2.1创建队列 2.2判断是否为空 2.3入队列 2.4出队列 2.5获取队头元素 2.6完整代码 1.队列实现栈 用队列实现栈https://leetcode.cn/problems/impleme…...

华为认证和红帽认证哪个比较好考呢

华为认证和红帽认证的考试难度、学习内容、适用范围等方面都有所不同,因此哪个比较好考要视具体情况而定: 考试难度:红帽认证的考试难度较高,需要考生具备较高的技术水平和实践经验;而华为认证则更注重基础知识的考察…...

[Java]_[中级]_[使用okhttp3和HttpClient代理访问外部网络]

场景 Java的http库常用的有HttpClient和Okhttp3, 如果公司有限制网络访问&#xff0c;需要代理才可以访问外网&#xff0c;那么如何使用代理Proxy&#xff1f; <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient<…...

ubuntu 20.04 docker 安装 mysql

要在Ubuntu 20.04上安装Docker并运行MySQL容器&#xff0c;您可以按照以下步骤操作&#xff1a; 1.更新系统包列表&#xff1a; sudo apt update2.安装Docker&#xff1a; sudo apt install docker.io3.启动Docker服务并设置其开机自启动&#xff1a; sudo systemctl start…...

C++在C语言基础上的优化

目录 一、命名空间 1、命名空间的定义 2、命名空间的使用 二、输入&输出 三、缺省参数 1、缺省参数的概念 2、缺省参数的分类 四、函数重载 五、引用 1.引用的概念 2.引用的特性 3、引用和指针的区别 六、内联函数 七、基于范围的for循环 一、命名空间 命名空…...

分享一个python实验室设备预约管理系统 实验室设备维修系统源码 lw 调试

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人七年开发经验&#xff0c;擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等&#xff0c;大家有这一块的问题可以一起交流&#xff01; &#x1f495;&…...

兵者多诡(HCTF2016)

环境:https://github.com/MartinxMax/CTFer_Zero_one 题目简介 解题过程 登录首页 提交png图片上传抓包&#xff0c;可以看到是向upload文件提交数据 在fp参数中尝试伪协议读取home.php文件 http://127.0.0.1:88/HCTF2016-LFI/home.php?fpphp://filter/readconvert.base64…...

【JAVA-Day04】Java关键字和示例:深入了解常用关键字的用法

Java关键字和示例&#xff1a;深入了解常用关键字的用法 摘要Java 关键字、标识符和命名规范一、Java 关键字常用关键字DEMO1. 示例代码使用 if 和 else 关键字&#xff1a;2. 示例代码使用 for 循环&#xff1a;3. 示例代码使用 switch 关键字&#xff1a;4. 示例代码使用 wh…...

Android请求网络报错:not permitted by network security policy

一、错误记录 https的接口请求正常的&#xff0c; 请求http的接口时报错&#xff1a;not permitted by network security policy 二、问题分析 原因&#xff1a; 由于 Android P(版本27以上) 限制了明文流量的网络请求&#xff0c;非加密的流量请求都会被系统禁止掉。如果当…...

python报错:ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1

python报错&#xff1a;ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1 问题分析 说明&#xff1a;requests包引入了urllib3&#xff0c;而新版本的urllib3 需要OpenSSL 1.1.1以上版本&#xff0c;否则报错&#xff1a; ImportError: urllib3 v2.0 only supports Ope…...

如何使用adb command来设置cpu频率和核数

透過ADB Shell設定CPU開核與freq的command與用法如下: # Disable PPM echo 0 > /proc/ppm/enabled # Enable PPM (Default) echo 1 > /proc/ppm/enabled echo 0 > /proc/ppm/enabled Fixed # Core for each cluster echo X Y > /proc/ppm/policy/ut_fix_core_num …...

236. 二叉树的最近公共祖先

236. 二叉树的最近公共祖先 题目-中等难度示例1. dfs 题目-中等难度 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p…...

Git常见问题:git pull 和 git pull --rebase二者区别

git pull 和 git pull --rebase 都是从远程仓库获取最新的更改并将其合并到本地分支。但它们之间的区别在于合并方式。以下是它们之间的主要区别&#xff1a; git pull&#xff1a; 当你执行 git pull 时&#xff0c;Git 会执行以下两个操作&#xff1a; git fetch&#xff…...

关于HarmonyOS元服务的主题演讲与合作签约

一、感言 坚持中&#xff0c;总会有很多意想不到的收获。 前几次参与HDC时更多的是观众、开发者、专家的身份&#xff0c;以参观、学习、交流为主。 通过几年的努力&#xff0c;和HarmonyOS功能成长&#xff0c;在2023年的HDC大会中&#xff0c;有了我的演讲&#xff0c;并带领…...

cache 学习

好文章&#xff1a; Cache的基本原理 - 知乎...

SSM - Springboot - MyBatis-Plus 全栈体系(六)

第二章 SpringFramework 四、SpringIoC 实践和应用 3. 基于 注解 方式管理 Bean 3.1 实验一&#xff1a;Bean 注解标记和扫描 (IoC) 3.1.1 注解理解 和 XML 配置文件一样&#xff0c;注解本身并不能执行&#xff0c;注解本身仅仅只是做一个标记&#xff0c;具体的功能是框…...

【Flutter】引入网络图片时,提示:Failed host lookup: ‘[图片host]‘

在使用 NetworkImage 组件加载外部图片时&#xff0c;提示 Failed host lookup: [图片host] 错误。 排查方向 1、清理缓存 解决方案&#xff1a; 尝试flutter clean清空缓存后重新安装依赖flutter pub get重新构建项目flutter create . 走完上述三个步骤后&#xff0c;再次…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

&#x1f4cc; LRU 缓存机制详解与实现&#xff08;Java版&#xff09; 一、&#x1f4d6; 问题背景 在日常开发中&#xff0c;我们经常会使用 缓存&#xff08;Cache&#xff09; 来提升性能。但由于内存有限&#xff0c;缓存不可能无限增长&#xff0c;于是需要策略决定&am…...

AI语音助手的Python实现

引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...