【python】sorted() list.sort()
文章目录
- sorted()和list.sort()
- sorted 函数
- sorted()根据键对字典排序
- 根据字典的键排序
- 根据字典的值排序
- 将排序结果转换回字典
- list.sort() 方法
- 总结
- key=lambda student: student['age']
sorted()和list.sort()
在Python中,sorted
函数和 list.sort()
方法都可以用来排序,但它们有一些不同之处。
sorted 函数
sorted
是一个内置函数,它可以对所有可迭代的对象进行排序,不仅限于列表。sorted
函数在排序完成后会返回一个新的列表,而不会改变原来的数据。
基本用法:
sorted(iterable, key=None, reverse=False)
iterable
:要排序的可迭代对象。key
:一个函数,它会被用来在进行比较之前从每个列表元素中提取一个比较键(比如通过一个函数指定排序的依据)。reverse
:布尔值。如果设置为True
,则列表元素将被逆序排列,默认为False
。
示例:
# 基本排序
numbers = [3, 1, 4, 1, 5, 9, 2, 6]
sorted_numbers = sorted(numbers) # 默认升序排序
print(sorted_numbers) # 输出: [1, 1, 2, 3, 4, 5, 6, 9]# 降序排序
sorted_numbers_desc = sorted(numbers, reverse=True)
print(sorted_numbers_desc) # 输出: [9, 6, 5, 4, 3, 2, 1, 1]# 通过key参数自定义排序规则
students = [{'name': 'John', 'age': 15}, {'name': 'Steve', 'age': 12}, {'name': 'Marry', 'age': 13}]
sorted_students = sorted(students, key=lambda student: student['age'])
print(sorted_students) # 按年龄排序的列表
实际上,sort()
方法是列表(list)对象的一部分,因此它只能直接用于列表。它是一个就地排序方法,意味着它会修改原列表,而不是返回一个新的排序列表。
不过,虽然 sort()
方法只能用于列表,但 sorted()
函数可以用于任何可迭代对象,包括列表、元组、字典、集合以及任何实现了 __iter__()
方法的自定义对象。
下面是 sorted()
函数的一些例子,展示了它如何应用于不同类型的可迭代对象:
列表(List):
numbers = [3, 1, 4, 1, 5, 9, 2, 6]
sorted_numbers = sorted(numbers)
元组(Tuple):
numbers_tuple = (3, 1, 4, 1, 5, 9, 2, 6)
sorted_numbers_tuple = sorted(numbers_tuple)
字典(Dictionary):
# 注意:字典是无序的,sorted会根据键来排序
my_dict = {'b': 2, 'c': 3, 'a': 1}
sorted_dict_keys = sorted(my_dict)
集合(Set):
my_set = {3, 1, 4, 1, 5, 9, 2, 6}
sorted_set = sorted(my_set)
对于非列表类型的可迭代对象,sorted()
函数会返回一个新的列表,其中包含了按照指定顺序排列的元素。
需要注意的是,当对字典或集合使用 sorted()
函数时,只能对字典的键或集合的元素进行排序,因为集合是无序的,而字典在Python 3.7之前是无序的(Python 3.7及以后版本中,字典是有序的,但排序通常是基于键进行的)。
sorted()根据键对字典排序
在Python中,字典是无序的集合,直到Python 3.7版本,字典开始保持插入顺序。如果你需要根据字典的键或值对字典进行排序,你可以使用sorted()
函数,并通过key
参数指定排序依据。
根据字典的键排序
如果你想要按照字典的键来排序,可以直接使用sorted()
函数,因为默认情况下,它就是根据键来排序的。
my_dict = {'b': 2, 'c': 3, 'a': 1}
sorted_by_key = sorted(my_dict.items())
print(sorted_by_key) # 输出: [('a', 1), ('b', 2), ('c', 3)]
这里,my_dict.items()
返回一个包含字典键值对的列表,sorted()
函数按照键进行排序。
根据字典的值排序
如果你想要按照字典的值来排序,可以通过key
参数传递一个函数,这个函数返回字典的值。
my_dict = {'b': 2, 'c': 1, 'a': 3}
sorted_by_value = sorted(my_dict.items(), key=lambda item: item[1])
print(sorted_by_value) # 输出: [('c', 1), ('b', 2), ('a', 3)]
在这个例子中,lambda item: item[1]
是一个匿名函数,它接受一个键值对item
,并返回这个键值对的值(item[1]
),sorted()
函数使用这个值来排序。
将排序结果转换回字典
sorted()
函数返回的是一个列表,如果你想要将排序后的结果转换回字典,可以使用字典推导式或dict()
构造函数。
sorted_dict = dict(sorted_by_key)
print(sorted_dict) # 输出: {'a': 1, 'b': 2, 'c': 3}# 或者使用字典推导式
sorted_dict = {k: v for k, v in sorted_by_key}
print(sorted_dict) # 输出: {'a': 1, 'b': 2, 'c': 3}
这样,你就可以得到一个根据键或值排序后的字典。
list.sort() 方法
list.sort()
是列表对象的一个方法,它只对列表进行排序,不适用于其他可迭代对象。这个方法会就地修改原列表,不会返回新列表。
基本用法:
list.sort(key=None, reverse=False)
参数和 sorted
函数的相同,区别在于 list.sort()
直接修改原列表。
示例:
# 基本排序
numbers = [3, 1, 4, 1, 5, 9, 2, 6]
numbers.sort() # 直接修改原列表
print(numbers) # 输出: [1, 1, 2, 3, 4, 5, 6, 9]# 降序排序
numbers = [3, 1, 4, 1, 5, 9, 2, 6]
numbers.sort(reverse=True)
print(numbers) # 输出: [9, 6, 5, 4, 3, 2, 1, 1]# 自定义排序规则
students = [{'name': 'John', 'age': 15}, {'name': 'Steve', 'age': 12}, {'name': 'Marry', 'age': 13}]
students.sort(key=lambda student: student['age'])
print(students) # 按年龄排序的列表
总结
- 如果你需要排序后的列表,并且不想修改原始数据,使用
sorted
函数。 - 如果你只需要对列表进行排序,并且不介意修改原始列表,可以使用
list.sort()
方法。 sorted
函数可以对任何可迭代对象进行排序,而list.sort()
方法只能用于列表。sorted
函数返回一个新的列表,而list.sort()
方法没有返回值(因为它直接修改原列表)。
key=lambda student: student[‘age’]
在Python的sorted
函数或list.sort()
方法中,key
参数允许你指定一个函数,这个函数会在排序之前应用于每个元素。这个函数的返回值将被用作排序的依据。key
参数提供了一种灵活的方式来自定义排序逻辑。
当你使用lambda
表达式作为key
参数时,你实际上是在创建一个匿名函数。lambda
表达式是一种简洁的方式来定义一个函数,它通常用于编写简单的、一次性的小函数。
让我们分解一下key=lambda student: student['age']
这个表达式:
lambda
:关键字,用于定义一个匿名函数。student
:这是lambda
函数的参数,它代表列表中的每个元素。在这个上下文中,每个元素都是一个字典,代表一个学生的信息。:
:在lambda
表达式中,:
用于分隔参数和表达式的主体。student['age']
:这是lambda
函数的主体,它指定了排序的依据。对于列表中的每个学生字典,这个表达式会返回学生的age
值。
当sorted
函数或list.sort()
方法使用这个key
参数时,它会在内部对每个元素(在这个例子中是学生字典)应用这个lambda
函数,然后根据返回的age
值进行排序。
示例:
假设我们有一个学生列表,每个学生都是一个包含姓名和年龄的字典:
students = [{'name': 'John', 'age': 15},{'name': 'Steve', 'age': 12},{'name': 'Marry', 'age': 13}
]
如果我们想根据年龄对这个列表进行排序,我们可以这样使用sorted
函数和lambda
表达式:
sorted_students = sorted(students, key=lambda student: student['age'])
在这个例子中,sorted
函数会对students
列表中的每个字典应用lambda
函数,lambda
函数会从每个字典中提取age
值。然后,sorted
函数会根据这些age
值对原始的学生字典进行排序。
最终,sorted_students
将是一个新列表,其中的学生字典按照年龄升序排列:
[{'name': 'Steve', 'age': 12},{'name': 'Marry', 'age': 13},{'name': 'John', 'age': 15}
]
使用lambda
表达式作为key
参数是一种非常简洁和高效的方式来指定自定义排序逻辑。
相关文章:
【python】sorted() list.sort()
文章目录 sorted()和list.sort()sorted 函数sorted()根据键对字典排序根据字典的键排序根据字典的值排序将排序结果转换回字典 list.sort() 方法总结 keylambda student: student[age] sorted()和list.sort() 在Python中,sorted 函数和 list.sort() 方法都可以用来…...
训练集alpaca、sharegpt格式
LLaMA-Factory微调支持的格式 支持 alpaca 格式和 sharegpt 格式的数据集。 Alpaca格式 格式: [{"instruction": "人类指令(必填)","input": "人类输入(选填)","output": "模型回答(必填)","syst…...

Hive的数据存储格式
目录 一、前言 二、存储格式 2.1、文本格式(TextFile) 2.1.1、定义与特点 2.1.2、存储与压缩 2. 1.3、使用场景 2.2、行列式文件(ORCFile) 2.2.1、ORC的结构 2.2.2、ORC的数据类型 2.2.3、ORC的压缩格式 2.2.3、ORC存储…...
Linux Rsyslog 配置
1、Linux Rsyslog客户端配置 1)安装rsyslog yum install rsyslog 2)启用TCP或UDP传输 vim /etc/rsyslog.conf# Provides UDP syslog reception #若启用UDP进行传输,则取消下面两行的注释 #$ModLoad imudp #$UDPServerRun 514# Provide…...

python实现放烟花效果庆祝元旦
马上就要2025年元旦啦,提前祝大家新年快乐 完整代码下载地址:https://download.csdn.net/download/ture_mydream/89926458...

模型训练识别手写数字(二)
模型训练识别手写数字(一)使用手写数字图像进行模型测试 一、生成手写数字图像 1. 导入所需库 import cv2 import numpy as np import oscv2用于计算机视觉操作。 numpy用于处理数组和图像数据。 os用于文件和目录操作。 2. 初始化画布 canvas np.z…...

深入Vue2
frontend Vue2 学习内容参考 /在线运行 Element 学习内容参考 /视频教学 vue2 1. vue 实例 当一个 Vue 实例被创建时,它将 data 对象中的所有的 property 加入到 Vue 的响应式系统中 但是当使用Object.freeze(),会阻止修改现有的 property&#x…...
opencv-rust 系列3: Create_mask
前言: 这里只是opencv-rust自带示例的中文注解. 略微增加了一些代码也是我在调试时用到的. 调试方法可参见前文. 一. 这个程序还是有点难度的, 关键点在于: 创建了遮罩. 直接调用一个函数, 还是很简单的.窗口事件处理. 注册窗口回调函数, 用以处理鼠标事件进程同步和互斥锁. 为…...
Go语言初识
一、Go语言概述 Go语言是为了取代C和java的地位,既要保留C的简洁,也追求java的规模化开发 并行及分布式的支持,使得开发多核及多机器集群程序如同单机一样简单 Go语言从语言级别支持协程(goroutine, 轻量级线程),Go语言…...

Android Activity SingleTop启动模式使用场景
通知栏 当用户点击通知栏中的通知时,可以使用单顶启动模式来打开对应的活动,并确保只有一个实例存在。 简单集成极光推送 创建应用 获取appkey参数 切换到极光工作台 极光sdk集成 Project 根目录的主 gradle 配置 Module 的 gradle 配置 Jpush依赖配置 配置推送必须…...
PHP 代码执行相关函数
函数 说明 示例代码 ${} 用于复杂的变量解析,通常在字符串内用来解析变量或表达式。可以配合 eval 或其他动态执行代码的功能,用于间接执行代码。 eval(${flag}); eval() 用于执行一个字符串作为 PHP 代码。可以执行任何有效的 PHP 代码片段。没有…...

五周年,继续破浪前行
五周年,TapData 再一次带着自己的“乘风破浪”大队,在一个阳光明媚的日子里,把生日过在了海上。 头顶日升日落,这条属于全体 Tap-pers 的航船,再次校准航向,在船长的带领下,驶向下一个晴好的明…...
【操作系统】Linux之进程管理一
第1关:获取进程常见属性 ret.pidgetpid(); ret.ppidgetppid(); 第2关:进程创建操作-fork pid_t pid fork(); if(pid-1) printf("创建进程失败!"); else if(pid0) printf("Children"); else printf("Parent"); …...

C语言_数据在内存中的存储
1. 整数在内存中的存储 计算机中的整数有三种2进制表示方法 :原码、反码、补码。 三种表示方式均有符号位和数值位两个部分,最高一位的是符号位,剩下的都是数值位。符号位用“0”表示“正”,用“1”表示“负”。 正数的原、反、…...

华为原生鸿蒙操作系统:我国移动操作系统的新篇章
华为原生鸿蒙操作系统:我国移动操作系统的新篇章 引言 在移动操作系统领域,苹果iOS和安卓系统一直占据主导地位。然而,随着华为原生鸿蒙操作系统的正式发布,这一格局正在发生深刻变化。作为继苹果iOS和安卓系统后的全球第三大移动…...
队列的基本操作(数据结构)
1.实验内容: 编写一个程序sqqueue.cpp,实现环形队列(假设栈中元素类型ElemType 为 char)的各种基本运算,并在此基础上设计一个程序exp4_1.cpp,完成如下功能: 2.实验步骤: (1)初始化队列q (2)判断队列q是否非空 (3…...

linux开机自启动三种方式
方式一、 1:rc.local 文件 1、执行命令:编辑 “/etc/rc.local” vi /ect/rc.local 2、然后在文件最后一行添加要执行程序的全路径。 例如,每次开机时要执行一个 hello.sh,这个脚本放在 / usr 下面,那就可以在 “/et…...

AI创作者与人类创作者的协作模式
公主请阅 1. AI创作者的崛起1.1 AI创作者的工作原理1.2 AI创作者的优势 2. 人类创作者的独特价值2.1 创造性与情感2.2 伦理与价值观2.3 文化与背景 3. AI与人类的协作模式3.1 协同创作3.2 内容编辑3.3 数据驱动的创作3.4 跨媒体协作 4. AI与人类协作的挑战4.1 技术局限性4.2 版…...

FPGA第 13 篇,使用 Xilinx Vivado 创建项目,点亮 LED 灯,Vivado 的基本使用(点亮ZYNQ-7010开发板的LED灯)
前言 在FPGA设计中,Xilinx Vivado软件是一款功能强大的设计工具,它不仅支持硬件描述语言(HDL)的开发,还提供了丰富的图形化设计界面,方便用户进行硬件设计、调试和测试。这里我们将详细介绍,如…...
Kafka文档阅读笔记之基本操作
官方资料 官方首页官方文档基本操作topic的配置参数 topic的部分操作 创建新的topic 命令样例,如下: bin/kafka-topics.sh \--bootstrap-server localhost:9092 \--create \--topic my_topic_name \--partitions 20 \--replication-factor 3 \--conf…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...

PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...

STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...