【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参数是一种非常简洁和高效的方式来指定自定义排序逻辑。

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

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

相关文章

梳理一下spring中,与message相关的知识点

本次梳理的相关知识点包括jms,amqp(rabbitmq),sping-messaging,spring-integration,springcloud-stream,这些都是与消息message相关的内容,它们有什么区别与联系呢? 相关的要点与相互关系都整理…

物联网消息队列Emqx日志配置及日志追踪以及Centos7上的rc.local开机不执行、git提交的小问题

一、物联网消息队列Emqx日志配置及日志追踪 EMQX支持将日志输出到控制台或者日志文件,或者同时使用两者。使用 Docker 部署 EMQX,默认只能通过 docker logs 命令查看 EMQX 日志。EMQX 的默认日志级别为 warning,默认在单日志文件超过10MB(log…

word压缩大小怎么弄?快来试试这几种压缩word方法!

word压缩大小怎么弄?在处理Word文档时,如果遇到体积过大的情况,无疑会带来一系列麻烦,大型Word文档不仅占据大量存储空间,而且在传输过程中会耗费更多时间,想象一下,当你急需将一份重要的文档发…

Perl打印9x9乘法口诀

本章教程主要介绍如何用Perl打印9x9乘法口诀。 一、程序代码 1、写法① use strict; # 启用严格模式,帮助捕捉变量声明等错误 use warnings; # 启用警告,帮助发现潜在问题# 遍历 1 到 9 的数字 for my $i (1..9) {# 对于每个 $i,遍历 1…

【设计模式系列】观察者模式

一、什么是观察者模式 观察者模式(Observer Pattern)是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都会得到通知并自动更新。这种模式也被称为发布-订阅模式&…

【AscendC算子开发】笔记2 算子高级开发和调试调优

算子调试 Tensor也可以通过特定的printf方法来打印,见上图。 gdb调试见上图。 为什么gdb调试无法成功,因为run.sh里面有两行export,如果直接通过.XX运行的话需要配置一下。 npu域也支持调试,可以使用上述的方法。 内存检测工…

AI自动生成PPT哪个软件好?智能生成PPT不再熬夜做课件

大概这世上,都是职场牛马对“PPT”这三个字母的头痛反应最大吧! 是的,就连各个年级段的老师也是很头痛——愁着怎样能在排版整齐的情况下,将必考知识点都呈现在PPT每一张幻灯片页面里...... 近期打听到用人工智能生成ppt课件&am…

ProtoBuf 的含义和安装

ProtoBuf 是什么 Protocol Buffers 是 Google 的⼀种语⾔⽆关、平台⽆关、可扩展的序列化结构数据的⽅法,它可⽤ 于(数据)通信协议、数据存储等。 Protocol Buffers 类⽐于、 XML,是⼀种灵活,⾼效,⾃动化机…

Java项目-基于springboot框架的智慧外贸系统项目实战(附源码+文档)

作者:计算机学长阿伟 开发技术:SpringBoot、SSM、Vue、MySQL、ElementUI等,“文末源码”。 开发运行环境 开发语言:Java数据库:MySQL技术:SpringBoot、Vue、Mybaits Plus、ELementUI工具:IDEA/…

2024年最新苹果iOS证书申请创建App详细图文流程

iOS 证书设置指南: 对于开发者来说,在没有Mac电脑或对Xcode等开发工具不熟悉的情况下,如何快速完成IOS证书制作和IPA文件提交至开发者中心一直是一个难题。但是现在,有了初雪云提供的极简工具,您可以轻松实现这两个任…

Tomcat隐藏版本号和报错信息

为了避免漏洞扫描的时候造成版本泄露&#xff0c;可以在conf/server.xml配置文件中的<Host>配置项中添加如下配置: <Valve className"org.apache.catalina.valves.ErrorReportValve" showReport"false" showServerInfo"false" /> …

c语言内核链表

c语言内核链表 在Linux中拥有大量的内核源码&#xff0c;在数据存储的这块位置拥有内核链表&#xff08;双向循环链表&#xff09; 由linux内核提供的链表文件&#xff0c;里面包含了多组内联函数和宏定义函数以及功能性函数。 内核链表中定义了多个函数&#xff0c;我们只需要…

(gersemi) CMake 格式化工具

文章目录 &#x1f9ee;介绍&#x1f9ee;安装&#x1f9ee;使用&#x1f5f3;️模式 modes&#x1f5f3;️样式配置 config ⭐END&#x1f31f;help&#x1f31f;交流方式 &#x1f9ee;介绍 BlankSpruce/gersemi: A formatter to make your CMake code the real treasure A f…

关闭或开启Win11系统的自动更新

Win11系统老是自动更新&#xff0c;每次更新后不仅拖慢计算机的运行速度&#xff0c;甚至打印机都无法使用了&#xff0c;给我们带来了很多困扰。 那么我们该如何彻底关闭Win11系统的自动更新呢&#xff1f;关闭Win11系统自动更新会有什么弊端呢&#xff1f; 下面就分享几个小方…

NVIDIA 发布适用于网络安全的 NIM Blueprint

德勤使用适用于容器安全的 NVIDIA NIM Agent Blueprint 帮助企业利用开源软件构建安全的 AI。 文章目录 &#x1f64a; 德勤使用 NVIDIA AI 保障软件安全&#x1f64a; 通过生成式 AI 保障软件安全&#x1f64a; 适用于网络安全成功的蓝图&#x1f3a0; 什么是 NVIDIA NIM Agen…

ESP32移植Openharmony外设篇(3)OLED屏

模块简介 产品介绍 OLED (Organic Light-Emitting Diode)&#xff1a;有机发光二极管又称为有机电激光显示&#xff0c;OLED显示技术具有自发光的特性&#xff0c;采用薄的有机材料涂层和玻璃基板&#xff0c;当有电流通过时&#xff0c;这些有机材料就会发光&#xff0c;而且…

数组中的算法

目录 1.什么是数组 2.数组上的算法 2.1二分查找算法 什么是二分查找算法&#xff1f; 算法步骤 算法时间复杂度 一个问题 例题 题目分析 解题代码 2.2双指针法 什么是双指针法&#xff1f; 例题 题目分析 解题代码 1.什么是数组 数组是在一块连续的内存空间…

【vuejs】富文本框输入的字符串按规则解析填充表单

今天遇到一个批量添加信息的需求&#xff0c;按照格式要求解析后填充到表单中&#xff0c;不符合规则的直接过滤掉 注&#xff1a;添加的信息都是随机生成&#xff0c;不用于实际用途 这是弹框输入的文本解析代码 export const editValToArr (value, bankArr) > {return n…

vue2-render:vue2项目使用render / 基础使用

一、本文内容 本文内容记录render常用的一些属性和方法的配置&#xff0c;以作参考 export default { data() {return { modelValue: ,key: 0,}; }, render(h) { return h(div, [ h(input, {class: input,attrs: { type: text }, key: this.key,props: { value: thi…

【mysql进阶】2-4. mysql 系统库

mysql System Schema (mysql系统库) Mysql Schema是⼀个系统库&#xff0c;表中存储了MySQL服务器运⾏时所需的信息。⼴义上&#xff0c;mysqlschema包含存储数据库对象元数据的数据字典和⽤于其他操作⽬的的系统表。数据字典表和系统表位于数据⽬录下⼀个名为 mysql.ibd 的表…