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

python列表基本运算

列表基本运算

成员运算符 in

老师你在上课喊人回答问题的时候,就犯了难。想点的人名字已经脱口而出了,但发现这位同学没来。

可不,今天的课就来了 8 个人:

students = ['林黛玉', '薛宝钗', '贾元春', '妙玉', '贾惜春', '王熙凤', '秦可卿', '贾宝玉'
]

又到了提问时间,你想喊妙玉和史湘云回答问题,可是总不能每次都在列表里一个一个找,确定她们有没有来吧。

这时,我们的成员运算符 in 就可以派上用场了。之前我们用它来判断指定字符串是否包含某些字符,现在我们用来判断一个元素是否在一个列表中,格式为 元素 in 列表。这是一个布尔表达式,如果元素在列表中,结果为布尔值 True,反之为 False

那么,我们就来看看妙玉和史湘云在不在今天的上课名单中吧:

miaoyu_in = '妙玉' in students
print(miaoyu_in)
# 输出:Truexiangyun_in = '史湘云' in students
print(xiangyun_in)
# 输出:False

由此我们知道妙玉今天来上课了,史湘云没来,那我们就点妙玉来回答吧。

元素 in 列表 既然是一个布尔表达式,我们就可以结合 if ... else 语句实现很多功能:

if '史湘云' in students:print('请史湘云背诵课文')
else:print('喊其他同学背诵吧')
# 输出:喊其他同学背诵吧

列表的加法

数字之间的加法是我们最熟悉不过的运算了,列表的加法也很简单,就是用 + 号将两个列表的元素放在一起组成一个新列表。

你准备开一次家长会,要喊同学们的家长过来,同学们也要一起参加。于是,贾珍和贾惜春的父亲贾敬,宝玉的父母贾政和王夫人,以及贾琏和贾迎春的父母贾赦和邢夫人要来到课堂。

这次 14 名同学都要到场。 此时 students 列表中有完整的 14 个名字;我们再把参会家长名单储存进 parents 列表中,再将两个列表相加,得到完整的与会列表 meeting

# 列表的加法
students = ['林黛玉', '薛宝钗', '贾元春', '贾探春', '史湘云', '妙玉', '贾迎春', '贾惜春', '王熙凤', '贾琏', '贾巧姐', '李纨', '秦可卿', '贾宝玉']parents = ['贾敬', '贾政', '王夫人', '贾赦', '邢夫人']meeting = students + parents# 打印 meeting 的结果,以及最终人数
print(meeting)
print('与会人数为', len(meeting), '人')
# 输出:
# ['林黛玉', '薛宝钗', '贾元春', '贾探春', '史湘云', '妙玉', '贾迎春', '贾惜春', '王熙凤', '贾琏', '贾巧姐', '李纨', '秦可卿', '贾宝玉', '贾敬', '贾政', '王夫人', '贾赦', '邢夫人']
# 与会人数为 19 人

这样我们就用加法生成了一个完整的与会名单。要注意用加法生成的列表的元素顺序,在 + 号前的列表元素排在新列表的前面,在 + 后的列表元素在新列表的后面。

列表的乘法

好的,学完列表的加法,我们来学列表的乘法。用 列表 * n,我们可以生成一个元素数目为原列表 n 倍的新列表。

还记得上一关中,期中考试排名最后的四名同学吗?他们是贾探春、秦可卿、贾惜春和贾琏。

为了让他们能赶上其他同学,你决定让他们多花些心思,让他们四个人在接下来的 20 天里,轮流来你办公室背课文。也就是说,四个人在 20 天里要循环 5 次。

我们如何得知后面具体的轮班表?这时可以用乘法,快速生成人名循环出现的轮班表。

# 将拖后腿的四名同学放进列表中
lag_behind = ['贾探春', '秦可卿', '贾惜春', '贾琏']# 用乘法快速生成轮班表
recite_list = lag_behind * 5print(recite_list)
# 输出:['贾探春', '秦可卿', '贾惜春', '贾琏', '贾探春', '秦可卿', '贾惜春', '贾琏', '贾探春', '秦可卿', '贾惜春', '贾琏', '贾探春', '秦可卿', '贾惜春', '贾琏', '贾探春', '秦可卿', '贾惜春', '贾琏']

看完上面代码的运行结果,我们发现,列表的乘法的定义,和数字的乘法很像:1 * 3 实际上是 1 + 1 + 1 的简写,那么 列表 * 3 就是 列表 + 列表 + 列表 的简写啦。

感觉怎么样,列表的运算是不是很简单呢?经历过列表索引和列表分片的你,掌握列表的运算肯定不在话下~接下来我们就在练习中巩固刚刚学到的知识吧!

课后练习

宝玉和黛玉一起去餐厅吃饭,他俩口味相似,点的菜也差不多。黛玉点了份经典套餐:意面、薯条和南瓜汤。宝玉见了,就和黛玉点了一样的套餐。点完后,又各自点了份饭后甜点:牛油果奶昔和草莓慕思蛋糕。

这样,他们就完成点单了,你能帮他们打印完整的菜单吗?

要求:

  1. 用列表的加法和乘法对题目代码中的 combo 和 dessert 进行操作,生成总菜单列表 menu
  2. 打印出新列表。
    combo = ['意面', '薯条', '南瓜汤']
    dessert = ['牛油果奶昔', '草莓慕思蛋糕']# 用加法和乘法组合新列表
    menu = combo * 2 + dessert# 将结果打印出来
    print(menu)

    我们说过,列表内的元素是可以修改的,我们使用这个特征,方便地记录同学们不断变动的出勤情况。

    不过有些时候,我们希望数据能安全地保存在那里,不会变动。比如上次的期中考试成绩是要长期保存的,我们虽然记录在了列表里,但要是哪天不小心手滑了,进行了“增删改”中的任何一种动作,那就不好办了。有没有什么办法,把列表“锁定”呢?

    下一篇,我们就介绍一种和列表很相似的数据类型——元组(tuple),满足我们对数据安全的需求。

http://www.lryc.cn/news/359882.html

相关文章:

  • Pytorch实用教程:pytorch中nn.Linear()用法详解 | 构建多层感知机 | nn.Module的作用 | nn.Sequential的作用
  • 如何利用unicloud阿里云云函数实现文件包括图片或文件上传,unicloud云函数写法一览
  • Django序列化器中is_valid和validate
  • 关于Golang中自定义包的简单使用-Go Mod
  • Dijkstra求最短路篇二(全网最详细讲解两种方法,适合小白)(python,其他语言也适用)
  • Dijkstra求最短路篇一(全网最详细讲解两种方法,适合小白)(python,其他语言也适用)
  • 计算机组成原理06:浮点数运算
  • opencascade 快速显示AIS_ConnectedInteractive源码学习
  • CentOS系统上安装单机版Redis教程
  • 纯Java实现Google地图的KMZ和KML文件的解析
  • k8s自定义资源你会创建吗
  • CATIA二次开发VBA入门(4)——进程外开发环境搭建,vb.net在Visual Studio中开发,创建圆柱曲面的宏录制到二次开发案例
  • c++字符串相关接口
  • Maven打包错误:无效的源发行版:17
  • 【环境栏Composer】Composer常见问题(持续更新)
  • 塑造更智慧的AI:策略与路径探索
  • 软设之快速排序
  • 从零学算法2965
  • 【Mac版】Java生成二维码
  • ROS2自定义服务接口
  • linux /www/server/cron内log文件占用空间过大,/www/server/cron是什么内容,/www/server/cron是否可以删除
  • C++青少年简明教程:break语句、continue语句
  • MySQL实战行转列(或称为PIVOT)实战sales的表记录了不同产品在不同月份的销售情况,进行输出
  • 牛客NC164 最长上升子序列(二)【困难 贪心+二分 Java/Go/PHP/C++】
  • 电子烟开发【恒压、恒有效算法】
  • 基于Open3D的点云处理22-非阻塞可视化/动态可视化
  • C++面试题其一
  • CentOS7某天的samba服务搭建操作记录(还没成功)
  • Qt Demo:基于TCP协议的视频传输Demo
  • 内存管理【C++】