成员运算符 in

我们用它来判断指定字符串是否包含某些字符,现在我们用来判断一个元素是否在一个列表中,格式为 元素 in 列表。这是一个布尔表达式,如果元素在列表中,结果为布尔值 True,反之为 False。

同样,举个例子

students = [

'林黛玉',

'薛宝钗',

'贾元春',

'妙玉',

'贾惜春',

'王熙凤',

'秦可卿',

'贾宝玉'

]

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('喊其他同学背诵吧')

# 输出:喊其他同学背诵吧

列表的加法

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

# 列表的加法

students = ['林黛玉', '薛宝钗', '贾元春', '贾探春',

'史湘云', '妙玉', '贾迎春', '贾惜春', '王熙凤', '贾琏',

'贾巧姐', '李纨', '秦可卿', '贾宝玉']

parents = ['贾敬', '贾政', '王夫人', '贾赦', '邢夫人']

meeting = students + parents

# 打印 meeting 的结果,以及最终人数

print(meeting)

print('与会人数为', len(meeting), '人')

# 输出:

# ['林黛玉', '薛宝钗', '贾元春', '贾探春', '史湘云', '妙玉', '贾迎春', '贾惜春', '王熙凤', '贾琏', '贾巧姐', '李纨', '秦可卿', '贾宝玉', '贾敬', '贾政', '王夫人', '贾赦', '邢夫人']

# 与会人数为 19 人

列表的乘法

用 列表 * n,我们可以生成一个元素数目为原列表 n 倍的新列表。

# 将拖后腿的四名同学放进列表中

lag_behind = ['贾探春', '秦可卿', '贾惜春', '贾琏']

# 用乘法快速生成轮班表

recite_list = lag_behind * 5

print(recite_list)

# 输出:['贾探春', '秦可卿', '贾惜春', '贾琏', '贾探春', '秦可卿', '贾惜春', '贾琏', '贾探春', '秦可卿', '贾惜春', '贾琏', '贾探春', '秦可卿','贾惜春', '贾琏', '贾探春', '秦可卿', '贾惜春', '贾琏']

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

元组

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

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

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

元组和列表非常相似。不同之处在于,外观上:列表是被方括号包裹起来的,而元组是被圆括号包裹起来的。本质上:列表里的元素可修改,元组里的元素是 不可以“增删改” 的。

还有一个微妙的地方要注意,就是只有一个元素的元组,在格式上与列表是不同的。仅一个元素 x 的列表写成 [x], 但仅一个元素的元组要在括号内多写个逗号:(x,)。

这是因为 Python 中,圆括号承担的语法功能太多了,可以用来表示元组,也可以用于当数学运算中的小括号。(x) 这样的写法,Python 会优先理解成数学运算的小括号,所以光秃秃的 (x) 对 Python 来说就是一个套了个小括号的数学运算表达式。我们来看看代码:

single = (1)

print(type(single))

# 输出:

single = (1,)

print(type(single))

# 输出:

修改元组内部的数据,将会报错

students = ('林黛玉', '贾宝玉', '薛宝钗')

students.append('史湘云')

# 报错:AttributeError: 'tuple' object has no attribute 'append'

# (属性错误:元组对象没有 append 属性)

students[2] = '袭人'

# 报错:TypeError: 'tuple' object does not support item assignment

#(类型错误:元组对象不支持给其中元素赋值)

del students[1]

# 报错:TypeError: 'tuple' object doesn't support item deletion

# (类型错误:元组对象不支持删除操作)

但是,由于查询与分片操作并不会改变数据,所以我们说的两种列表元素的查询方式以及分片操作,在元组中是可用的。列表运算符,元组也都支持。用 in 查询元素是否在元组内;用 + 将两个元组叠加生成新元组;用 * 生成元素重复循环多次的新元组。

有人可能有人会问,如果真的有特殊需求,需要修改元组中的元素怎么办?

在这里有一个思路,可以先用 list() 函数把元组转换成列表,相当于给数据“解锁”,将元素修改完毕后,再用 tuple() 函数转换回元组,相当于“重新上锁”。

我们在下面的代码中来看看具体的操作步骤:

students = ('林黛玉', '贾宝玉', '薛宝钗')

# 用 list() 函数给数据“解锁”,生成一个相同元素的新列表

students_list = list(students)

# 在新列表中修改元素

students_list[0] = '妙玉'

# 两次给数据“上锁”

students = tuple(students_list)

print(students)

# 输出:('妙玉', '贾宝玉', '薛宝钗')

列表的扩展操作

zip() 函数

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

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() 将两个列表合并

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)]

enumerate() 函数

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

# 枚举原排名表后,再转回列表的形式

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() 处理结果相似的嵌套结构,列表中每个元素是一个元组,元组中是排名和姓名。

enumerate() 函数中有个默认参数表示起始数字,默认为 0,所以机器才会从 0 开始数。我们可以手动输入起始数字 1,让结果更符合我们的习惯。

rank_with_ID = list(enumerate(midterm_rank, 1))

编程练习

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

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

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

books = ['红楼梦', '三国演义', '水浒传', '西游记']

authors = ['曹雪芹', '罗贯中', '施耐庵', '吴承恩']

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

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

要求:

1.用 zip() 函数将 books 和 authors 以“著作名,作者”的形式结合成新列表。并将结果打印在屏幕上。

2.新建 books_favorite 列表,按小贝喜爱的顺序排列四本书。

3.用 enumerate() 函数,从 1 开始,枚举 books_favorite 列表,将结果打印在屏幕上。

books = ['红楼梦', '三国演义', '水浒传', '西游记']

authors = ['曹雪芹', '罗贯中', '施耐庵', '吴承恩']

# 用 zip() 将两个列表绑定

zip(books,authors)

# 转换回列表后打印绑定结果

print(list(zip(books,authors)))

# 新建 books_favorite 列表,顺序按小贝的喜好来

books_favorite=["三国演义","西游记","红楼梦","水浒传"]

# 用 enumerate() 函数枚举结果,从 1 开始

books_favorite_count=enumerate(books_favorite,1)

# 转换回列表后打印结果

print(list(books_favorite_count))

#输出[('红楼梦', '曹雪芹'), ('三国演义', '罗贯中'), ('水浒传', '施耐庵'), ('西游记', '吴承恩')][(1, '三国演义'), (2, '西游记'), (3, '红楼梦'), (4, '水浒传')]

range() 函数

用 range() 函数实现,快速生成一个有规律的数字序列。该函数的基本格式为 range(start, stop, step),返回一个 range 对象,要用 list() 函数转换成列表。

range() 函数最多支持 3 个参数,start 参数是起始元素,stop 参数是结束元素,step 是步长,也就是计数的间隔。其中 start 和 step 是可选的,分别默认为 0 和 1,比如 list(range(3)) 可以快速生成 [0, 1, 2] 列表。

python列表乘法运算_Python列表基本运算和元组相关推荐

  1. python字典键值可以是元组或列表吗_Python列表、元组、字典、集合的内置使用方法...

    列表: 是一种可以存储多个值得数据容器 内容是有序的 可以存储任何数据类型 可以存储重复的元素 是可变类型(当内容发生变化时id不变) 元组: 也是一种可以存储多个值得数据容器 元组中的元素不可以被修 ...

  2. python 列表解析式_python列表解析式,字典解析式,集合解析式和生成器

    一.列表解析式(列表推倒式): 功能:是提供一种方便的列表创建方法,所以,列表解析式返回的是一个列表. 1 lst = [1, 3, 5, 8, 10] 2 ll = [x+x for x in ls ...

  3. python的列表方法_Python列表的常用方法

    一.列表是什么? 列表是由一序列特定顺序排列的元素组成的,可以把字符串.数字.字典等都可以加入列表中. 列表中元素之间没有任何关系,列表也是自带下标的,默认从0开始. 列表是最常用的Python数据类 ...

  4. python索引用法_python 列表索引问题

    展开全部 数据结构是通e5a48de588b63231313335323631343130323136353331333363366261过某种方式组织在一起的数据元素的集合.在python中,最基本 ...

  5. python定义一个函数列表排序_Python 列表(修改、添加、删除、排序)

    Python的基本数据类型有整数,浮点数,布尔,字符串,它们是最基本的数据.在实际编程中,我们要经常组织由很多基本数据组成的集合,这些集合的不同组织方式就是:数据结构,今天讲的是数据结构中的Pytho ...

  6. python 列表拆分_python列表拆分

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 我对python很新,但我遇到了问题. 我有一个看起来像列表的文本文件. 例如: ...

  7. python列表去重_python列表去重

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 方法一:利用集合去重 # ! usrbinpython3# -*- coding ...

  8. python sorted下标_Python列表操作最全面总结

    1.列表添加元素 列表中可以使用append.insert.extend方法实现元素的添加. append会把新元素添加到列表末尾 "a", insert(index, objec ...

  9. python copy用法_Python 列表 copy() 使用方法及示例

    Python 列表 copy() 使用方法及示例 copy()方法返回列表的浅表副本. 列表可以被复制使用=运算符.例如:old_list = [1, 2, 3] new_list = old_lis ...

最新文章

  1. 手把手教你研发自己的智能无人机 谢谢您呀!
  2. TensorRT安装及使用教程
  3. OpenCV之CvMat Mat IplImage之间相互转换
  4. Kali Linux Aircrack-ng简单破解WEP加密方式网络
  5. 4/100. Maximum Depth of Binary Tree
  6. 大道至简: 拉新、促活和留存
  7. Linux文档阅读笔记-cut与sort的基本用法
  8. linux安装php支持redis拓展
  9. opengl 教程(15) 摄像机控制(2)
  10. Apache Flink 1.10.0 重磅发布,年度最大规模版本升级!
  11. 史上最简单的上传文件到linux系统方法
  12. 应用程序框架实战四:你需要应用程序框架吗
  13. 单片机烧录文件格式转换(1)
  14. PCS7专用台式计算机,PCS7.V7.0.深入浅出.pdf
  15. css3ps插件,css3ps插件
  16. 好淘客饿了么返利系统-外卖返利优惠券系统-支持美团、饿了么的外卖和商超/电影票 支持多级代理返利
  17. 【读书笔记】看你能坚持读几本书?!——三十本互联网必看书籍
  18. 增强 扫描王 源码_CamScanner扫描全能王v5.15.3 安卓版
  19. 计算今天是本学期第几周
  20. FBA海运到美国费用一般包含哪些?

热门文章

  1. 1024点fft原理及fpga实现
  2. Greenplum配置mirror
  3. mysqli mysql assoc_在预准备语句上使用fetch_assoc(php mysqli)
  4. 转载:程序员35岁前成功的12条黄金法则
  5. 形态学图像处理之凸壳
  6. Chapter1-运动
  7. C语言中文件的打开和关闭
  8. PDSCH type0/type1
  9. Linux-基础命令和远程管理命令
  10. canvas字体样式