python列表的扩展操作

列表的扩展操作

zip() 函数

我们先学习 zip() 函数,将排名与分数挂钩。

还记得期中考试的顺序排名和分数吗?我们把排名放在了列表 midterm_rank 中,把分数放在了 scores 中。不过当时 scores 并没有排序,我们要对数据进行预处理,让其与 midterm_rank 的排序逻辑一致。

我们将 scores 中的分数通过 sort() 与 reverse() 从小到大排序再倒转的方式实现。

midterm_rank = ['妙玉', '薛宝钗', '贾元春', '王熙凤', '林黛玉', '贾巧姐', '史湘云','贾迎春', '贾宝玉', '李纨', '贾探春', '秦可卿', '贾惜春', '贾琏'
]scores = [100, 92, 77, 85, 81, 90, 100, 86, 79, 93, 91, 96, 75, 84]# 将 scores 元素从低到高排列
scores.sort()# 倒转 scores 中的排列顺序
scores.reverse()print(scores)
# 输出:[100, 100, 96, 93, 92, 91, 90, 86, 85, 84, 81, 79, 77, 75]

接下来就是 zip() 函数上场的时间啦。它的作用是将两个长度相同的列表合并起来,相同位置的元素会被一一组对,变成一个元组。结果返回一个组合好的打包对象,需要我们再用 list() 函数转换回列表。

哎?上面的话是不是有点啰嗦呀,让我 show you the code 吧。

# 用 zip() 将两个列表合并
zipped = zip(midterm_rank, scores)# 将结果转换回列表后,赋值给 zipped_rank
zipped_rank = list(zipped)# 来看看结果
print(zipped_rank)
# 输出:[('妙玉', 100), ('薛宝钗', 100), ('贾元春', 96), ('王熙凤', 93), ('林黛玉', 92), ('贾巧姐', 91), ('史湘云', 90), ('贾迎春', 86), ('贾宝玉', 85), ('李纨', 84), ('贾探春', 81), ('秦可卿', 79), ('贾惜春', 77), ('贾琏', 75)]

我们看到,列表 zipped_rank 是一个嵌套结构,其中每个元素是一个元组,每个元组中是原来两个列表中对应位置的元素。

大家看懂 zip() 的操作逻辑了吗?zip() 是一个很形象的函数。因为单词“zip”的原义就是“拉链”,将左右两边链条中的同一位置的链齿压到一起,最后合并成一整个链条。

通过 zip() 这个“拉链”,我们成功将同学们的排名和他们对应的分数绑定到了一起,这样就可以更直观地分析他们的成绩啦。

enumerate() 函数

enumerate() 函数最难的地方,可能不是用法,而是这个函数名……可能是目前我们学起来最难背的英文单词之一啦。

“enumerate”单词本身意思是“枚举、数数”。所以对应的函数功能,就是一个一个地将列表中的元素数出来。它返回的是一个枚举对象,也需要我们用 list() 函数转换回列表。

有了这个函数,我们就可以把原来的排名表 midterm_rank 中,每个同学的具体排名都显示出来了。

但是要注意:机器还是会从 0 开始数……

# 枚举原排名表后,再转回列表的形式
rank_with_id = list(enumerate(midterm_rank))print(rank_with_id)
# 输出:[(0, '妙玉'), (1, '薛宝钗'), (2, '贾元春'), (3, '王熙凤'), (4, '林黛玉'), (5, '贾巧姐'), (6, '史湘云'), (7, '贾迎春'), (8, '贾宝玉'), (9, '李纨'), (10, '贾探春'), (11, '秦可卿'), (12, '贾惜春'), (13, '贾琏')]

我们看到,最后的结果是与 zip() 处理结果相似的嵌套结构,列表中每个元素是一个元组,元组中是排名和姓名。

毕竟结果是要在现实世界中使用的,从 0 开始数的排名实在不太符合我们实际使用的要求。好在 enumerate() 函数中有个默认参数表示起始数字,默认为 0,所以机器才会从 0 开始数。我们可以手动输入起始数字 1,让结果更符合我们的习惯。

# enumerate()中这次有两个参数,一个为排名列表,一个为起始数字。
rank_with_id = list(enumerate(midterm_rank, 1))print(rank_with_id)
# 输出:[(1, '妙玉'), (2, '薛宝钗'), (3, '贾元春'), (4, '王熙凤'), (5, '林黛玉'), (6, '贾巧姐'), (7, '史湘云'), (8, '贾迎春'), (9, '贾宝玉'), (10, '李纨'), (11, '贾探春'), (12, '秦可卿'), (13, '贾惜春'), (14, '贾琏')]

有了 zip() 和 enumerate() 函数,我们就能给列表中的每个元素附加更多的信息,方便我们查看与操作。我们之后会学到“循环”的知识,进一步了解这两个函数的作用。

另外,生成的这种嵌套结构,我们称为“二维列表”,下一关会详细讲解它的用法哦。

那么下面,我们用一个小练习,来巩固本小节的知识吧。

本章练习:

练习一:

《红楼梦》是我们四大名著之一,也是我国文学史上是最巅峰之作。作者是曹雪芹先生,也是贾宝玉的原型。

我们知道,四大名著的其它三本分别是罗贯中的《三国演义》,施耐庵的《水浒传》,以及吴承恩的《西游记》。

我们用两个列表来分别储存书名和作者:

books = ['红楼梦', '三国演义', '水浒传', '西游记']
authors = ['曹雪芹', '罗贯中', '施耐庵', '吴承恩']

你可以用我们刚刚学过的知识,将书名和作者绑定起来吗?

另外,在小贝心目中,四大名著的地位排序是:《三国演义》《西游记》《红楼梦》《水浒传》,他将四本书按他心目中的顺序录进了列表 books_favorite 中。我们能用用刚刚学过的代码帮他对 books_favorite 进行操作,附上数字表示的排名吗?

要求:

  1. 用 zip() 函数将 books 和 authors 以“著作名,作者”的形式结合成新列表。并将结果打印在屏幕上。
  2. 新建 books_favorite 列表,按小贝喜爱的顺序排列四本书。
  3. 用 enumerate() 函数,从 1 开始,枚举 books_favorite 列表,将结果打印在屏幕上。
books = ['红楼梦', '三国演义', '水浒传', '西游记']
authors = ['曹雪芹', '罗贯中', '施耐庵', '吴承恩']# 用 zip() 将两个列表绑定
zip = zip(books,authors)# 转换回列表后打印绑定结果
print(list(zip))# 新建 books_favorite 列表,顺序按小贝的喜好来
books_favorite = ['三国演义', '西游记', '红楼梦', '水浒传']# 用 enumerate() 函数枚举结果,从 1 开始
favorite = enumerate(books_favorite, 1)# 转换回列表后打印结果
print(list(favorite))

今天学习了这么多知识,我越来越钦佩坚持的你。我们来梳理一下今日所学。

在 列表基本运算 一节,我们用 in 判断列表中是否包含某一元素,用 + 将两个列表链接在一起,用 * 将列表元素重复多次生成新列表。

我们学习了新的数据类型——元组,它和列表很相似,但是不支持元素的修改,但支持元素的查询及分片,也支持上面说的三种运算。

zip() 函数 可以合并两个列表,将两个列表中一一对应的元素合并到一个元组中,从而生成一个新的 zip 类型。在 Python 3 中,需要用 list() 函数将上述两种类型转化为列表。

enumerate() 函数 可以给列表中每个元素加上序号,合并到一个元组中,从而生成一个新的 enumerate 类型,同样需要用 list() 函数将其转化为列表。

练习二:

体育老师为要测试金陵十二钗的体育成绩,于是组织她们进行了一次立定跳远测试。老师将她们分成三组,每组四个人,分别记录她们的成绩(单位厘米),储存在列表 group1group2group3 中。

现体育老师在要对三组的数据汇总,从高到低排列并附上排名,你能帮帮他吗?

要求:

  1. 将题目中的 group1group2group3 合并在一起;
  2. 对合并后的成绩从高到低排序;
  3. 用 enumerate() 函数将排序后的列表从 1 开始枚举,将结果储存在列表 run_rank 中;
  4. 打印出 run_rank
    group1 = [198, 133, 154, 166]
    group2 = [188, 172, 119, 142]
    group3 = [168, 153, 131, 128]# 将三组的成绩合并到一起
    group = group1 + group2 + group3
    # 对合并后的成绩从低到高排序
    group.sort()
    # 反转——对合并后的成绩从高到低排序
    group.reverse()# 将合并后的成绩用数字枚举出来,并转换成列表放进 run_rank 中
    run_rank = list(enumerate(group, 1))# 打印最后的排名和成绩
    print(run_rank)

    练习三:

谁是 Top3?

期中考试过后,老师将排名以先后顺序储存在了列表 midterm_rank 中,接下来需要你来帮帮忙,用代码帮老师筛选出这次考试的前三名,并把对应的名次标注上。最终应打印出如下的内容,快来动手试试吧~

[(1, '妙玉'), (2, '薛宝钗'), (3, '贾元春')]

答:

midterm_rank = ['妙玉', '薛宝钗', '贾元春', '王熙凤', '林黛玉', '贾巧姐', '史湘云','贾迎春', '贾宝玉', '李纨', '贾探春', '秦可卿', '贾惜春', '贾琏'
]# 解答一:
rank = midterm_rank[:3]
list = list(enumerate(rank, 1))# 解答二
# rank = midterm_rank[:3]
# list = list(enumerate(rank, 1))
print(list)

练习四:

闻闻使用 Python 记录了自己的书单,总共有两份。现在,让我们对闻闻的书单进行简单的处理。

我们总共需要做两件事:

  1. 将两份书单合并;
  2. 写一个查询书籍是否在书单里的函数 check_book(),如果在就打印出 已查询到xxx,否则打印出 未查询到xxx(xxx 为要查询的书名)。
books1 = ['活着', '围城', '平凡的世界', '骆驼祥子']
books2 = ['边城', '城南旧事', '撒哈拉的故事', '三体全集']# 合并两个书单
books = books1 + books2def check_book(name):if name in books:print('已查询到', name)else:print('未查询到', name)check_book('边城')
check_book('红楼梦')

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

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

相关文章

深入理解文件系统和日志分析

文件是存储在硬盘上的,硬盘上的最小存储单位是扇区,每个扇区的大小是512字节。 inode:存储元信息(包括文件的属性,权限,创建者,创建日期等等) block:块,连续…

小白跟做江科大32单片机之LED闪烁

原理介绍 原理介绍详见: 【STM32】江科大STM32学习笔记汇总(已完结)_stm32江科大笔记-CSDN博客https://blog.csdn.net/u010249597/article/details/134762513 项目准备 1.在项目文件夹中新建3-1 LED文件夹 2.keil新建项目,打开新建的3-1 LED&#xf…

【CC2530-操作外部flash】

zigbee cc2530操作flash,以cc2530读flash_id为例子; void InitIO() {CLKCONCMD & ~0x40; //设置系统时钟源为32MHZ晶振 while(CLKCONSTA & 0x40); //等待晶振稳定为32M CLKCONCMD & ~0x47; //设置系统主时钟频率为32MHZ…

面试(五)

目录 1. 知道大顶堆小顶端吗,代码怎么区分大顶端小顶端 2. 计算机中栈地址与内存地址增长方向相反吗? 3. %p和%d输出指针地址 4. 为什么定义第二个变量时候,地址反而减了 5. 12,32,64位中数据的占字节?…

物质的量质量,它们可不是一个概念

物质的量&质量,它们可不是一个概念。 物质的量&质量 乍一听物质的量,还以为是和质量有什么关系,是不是?其实物质的量和质量没什么直接的联系。 物质的量是国际单位制中7个基本物理量之一,其符号为n&#xf…

Aras Innovator-Team(群组)的使用方法

当Aras Innovator在处理权限时,在不使用Team的情况下,系统的权限配置可以满足大部分业务场景,如:常见的按照组织架构,成员和角色分配权限,按照生命周期分配权限等。 如果遇到比较复杂的权限需求&#xff0c…

AltiumDesigner/AD添加数据库连接

1.首先确保本机电脑有无对应的数据库驱动,例如我这边要添加MySQL的数据,则需要首先下载MySQL数据驱动:MySQL :: Download MySQL Connector/ODBC (Archived Versions) 2.运行“odbcad32.exe”,如下图添加对应的数据库配置&#xf…

【C/C++】C/C++车辆交通违章管理系统(源码+数据文件)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

面试题:useEffect的Clean Up 什么时候触发?

​ useEffect作为做常用的Hook,以下三个知识点你有必要了解下~ 防止写出奇怪的代码祸害队友,而我不幸就是这个受害者!!!!! useEffect的依赖项为空 useEffect的dependencyList作为一个可选参数…

Pytest框架中用例用例执行常用参数介绍

pytest 支持通过命令行参数来定制测试运行的方式。以下是一些常用的 pytest 执行参数介绍。 学习目录 -q 或 --quiet: 安静模式,只显示进度和摘要 -s : 选项允许在测试的输出中捕获 stdout 和 stderr。 -v : 选项会使 pytest 的输出更加详细。 -k :…

Git 恢复已删除的branch

六一节晚上改了点code, 做完之后commit, 然后误删了这个branch, 并且新建了branch. 那么怎样恢复已删除的branch呢? 网上查询一番,找到了答案: 1. git reflog 找到被删的branch中最后一笔commit, 记录它的SHA1。 怎么看SHA1是被删除的bra…

鸿蒙应用Stage模型【应用/组件级配置】

应用/组件级配置 在开发应用时,需要配置应用的一些标签,例如应用的包名、图标等标识特征的属性。本文描述了在开发应用需要配置的一些关键标签。 应用包名配置 应用需要在工程的AppScope目录下的[app.json5配置文件]中配置bundleName标签,…

Python PyInstaller打包方法介绍

为了将开发好的Python工具交付给其他人使用,除了在目标电脑部署Python编译环境以外,我们还可以将它打包成可执行文件,这样目标电脑不需要安装Python环境就可以运行。将Python程序打包成可执行文件的方法有多种,比如Nuitka、PyInst…

微博增强-tampermonkey脚本实现网页管理悄悄关注

不是很明白微博为什么不出个x的列表功能,毕竟现在信息洪流,有些东西只是要看要了解,但不希望天天在首页轰炸眼睛,扰乱心智。 这个tampermonkey脚本适配了pc web和手机pwa版本(weibo.com/m.weibo.cn),解决了…

golang map部分原理源码个人走读-附个人理解过程图解

近期再写map的demo时出现了下面一段报错,于是带着疑惑去看了一下源码 目的:主要想知道为啥map不让并发读写 fatal error: concurrent map read and map write 一.map的数据结构 先有个印象,后续会详细介绍 // A header for a Go map. ty…

NDIS Filter开发-OID 请求

NDIS 定义对象标识符 (OID) 值来标识适配器参数,其中包括操作参数,例如设备特征、可配置的设置和统计信息。 Filter驱动程序可以查询或设置基础驱动程序的操作参数,或过滤/覆盖顶层驱动程序的 OID 请求。 NDIS 还为 NDIS 6.1 及更高版本的Fi…

Informer

I n f o r m e r Informer Informer 摘要: 长序列时间序列的预测 i n f o r m e r informer informer优点: P r o b s p a r e Probspare Probspare自关注机制,在时间复杂度和内存使用方面达到 O ( N l o g N ) O(NlogN) O(NlogN),在序列依…

IP协议1.0

基本概念: • 主机: 配有IP地址, 但是不进⾏路由控制的设备; • 路由器: 即配有IP地址, ⼜能进⾏路由控制; • 节点: 主机和路由器的统称; IP协议的报头 • 4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4. • 4位头部⻓度(header length): IP头部的⻓…

mybatis增删改查模板设置及设置调用

mybatis增删改查模板设置 系统配置文件完成以及连接好数据之后,就可以用这个mybatis了,首先写这个数据库的增删改查模板StashMapper.xml,这个东西是要放在DAO层中的奥,切记。 1.编写mybatis对应数据库的增删改查模板 在我的Sta…

DKTCDR:Domain-Oriented Knowledge Transfer for Cross-Domain Recommendation

Domain-Oriented Knowledge Transfer for Cross-Domain Recommendation IEEE(CCF B.SCI 1)-Guoshuai Zhao, Xiaolong Zhang, Hao Tang, Jialie Shen, and Xueming Qian-2024 思路 在CDR中,构建连接两个域的桥梁是实现跨域推荐的基础。然而现在的CDR方法往往在连接两个域时忽…