老师你在上课喊人回答问题的时候,就犯了难。想点的人名字已经脱口而出了,但发现这位同学没来。
可不,今天的课就来了 8 个人:
- students = [
- '林黛玉', '薛宝钗', '贾元春', '妙玉', '贾惜春', '王熙凤', '秦可卿', '贾宝玉'
- ]
又到了提问时间,你想喊妙玉和史湘云回答问题,可是总不能每次都在列表里一个一个找,确定她们有没有来吧。
这时,我们的成员运算符 in
就可以派上用场了。之前我们用它来判断指定字符串是否包含某些字符,现在我们用来判断一个元素是否在一个列表中,格式为 元素 in 列表
。这是一个布尔表达式,如果元素在列表中,结果为布尔值 True
,反之为 False
。
那么,我们就来看看妙玉和史湘云在不在今天的上课名单中吧:
- miaoyu_in = '妙玉' in students
- print(miaoyu_in)
- # 输出:True
-
- xiangyun_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 * 5
-
- print(recite_list)
- # 输出:['贾探春', '秦可卿', '贾惜春', '贾琏', '贾探春', '秦可卿', '贾惜春', '贾琏', '贾探春', '秦可卿', '贾惜春', '贾琏', '贾探春', '秦可卿', '贾惜春', '贾琏', '贾探春', '秦可卿', '贾惜春', '贾琏']
看完上面代码的运行结果,我们发现,列表的乘法的定义,和数字的乘法很像:1 * 3 实际上是 1 + 1 + 1 的简写,那么 列表 * 3
就是 列表 + 列表 + 列表
的简写啦。
感觉怎么样,列表的运算是不是很简单呢?经历过列表索引和列表分片的你,掌握列表的运算肯定不在话下~接下来我们就在练习中巩固刚刚学到的知识吧!
宝玉和黛玉一起去餐厅吃饭,他俩口味相似,点的菜也差不多。黛玉点了份经典套餐:意面、薯条和南瓜汤。宝玉见了,就和黛玉点了一样的套餐。点完后,又各自点了份饭后甜点:牛油果奶昔和草莓慕思蛋糕。
这样,他们就完成点单了,你能帮他们打印完整的菜单吗?
要求:
combo
和 dessert
进行操作,生成总菜单列表 menu
;- combo = ['意面', '薯条', '南瓜汤']
- dessert = ['牛油果奶昔', '草莓慕思蛋糕']
-
- # 用加法和乘法组合新列表
- menu = combo * 2 + dessert
-
- # 将结果打印出来
- print(menu)
我们说过,列表内的元素是可以修改的,我们使用这个特征,方便地记录同学们不断变动的出勤情况。
不过有些时候,我们希望数据能安全地保存在那里,不会变动。比如上次的期中考试成绩是要长期保存的,我们虽然记录在了列表里,但要是哪天不小心手滑了,进行了“增删改”中的任何一种动作,那就不好办了。有没有什么办法,把列表“锁定”呢?
下一篇,我们就介绍一种和列表很相似的数据类型——元组(tuple),满足我们对数据安全的需求。