一切拥有权力的人都容易滥用权力——孟德斯鸠《论法的精神》。
一、练习题
0. 请用一句话描述什么是列表?再用一句话描述什么是元组?
1. 什么情况下你需要使用元组而不是列表?
2. 当元组和列表掉下水,你会救谁?
3. 请将下图左边列表的内置方法与右边的注释连线,并圈出元组可以使用的方法。
(图片转载https://blog.csdn.net/junwei0206/article/details/44746877)
4. 创建一个元组,什么情况下逗号和小括号必须同时存在,缺一不可?
5. x, y, z = 1, 2, 3 请问x, y, z是元组吗?
6. 请写出以下情景中应该使用列表还是元组来保存数据:
- 游戏中角色的属性:
- 你的身份证信息:
- 论坛的会员:
- 团队合作开发程序,传递给一个你并不了解具体实现的函数的参数:
- 航天火箭各个组件的具体配置参数:
- NASA系统中记录已经发现的行星数据:
7. 上节课我们通过课后作业的形式学习到了“列表推导式”,那请问如果我把中括号改为小括号,会不会得到“元组推导式”呢?
8.请写下这一节课你学习到的内容:格式不限,回忆并复述是加强记忆的好方式!
我的答案
一、
0. 列表(list):可以使不同数据类型的元素按顺序排列的强化型数组集合。元组(tuple):是一种带了“枷锁”的列表,也就是不可变的列表,这里的不可变指的是不能修改元组中初始赋予的元素。为什么要引入元组?
举例说明:
>>> tuple3 = 'red', 3, '小乌龟'
>>> tuple3[0] = 'green'
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
tuple3[0] = 'green'
TypeError: 'tuple' object does not support item assignment #元组不可修改元素>>> list1 = [1, 3, 4]
>>> list1[0] = 'green'
>>> list1
['green', 3, 4]>>> del tuple3[0]
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
del tuple3[0]
TypeError: 'tuple' object doesn't support item deletion #元组不可删除元素
>>> del list1[0]
>>> list1
[3, 4]
1. 在你有一些不确定长度的相同类型队列的时候使用列表;假设你有一个函数是用来在目录中查找结尾为 *.py 的文件。函数返回的应该是一个列表,因为你并不知道你会找到多少个文件,而这些文件都有相同的含义:它们仅仅是你找到的另一个文件。
在你提前知道元素数量的情况下,并知道某个具体位置的参数代表什么含义时,应使用元组。
当我们希望内容不被轻易改写的时候,我们使用元组(把权力关进牢笼)。当我们需要频繁修改数据,我们使用列表。
2. 具体情况具体分析。
如果是我,我会救列表,因为列表提供了比元组更丰富的内置方法,这相当大的提高了编程的灵活性。回头来看下元组,元组固然安全,但元组一定创建就无法修改(除非通过新建一个元组来间接修改,但这就带来了消耗),而我们人是经常摇摆不定的,所以元组只有在特殊的情况才用到,平时还是列表用的多。综上所述,小甲鱼会救列表。
3.
注:以上方法,元组只能用 count()和index() !
4. 在拼接(元组允许拼接)只含一个元素的元组时,逗号和小括号必须同时存在。
例如课堂上的栗子:
>>> temp = (‘小甲鱼’, ‘黑夜’, ‘迷途’, ‘小布丁’) 如果我想在“黑夜”和“迷途”之间插入“怡静”,我们应该: >>> temp = temp[:2] + (‘怡静’,) + temp[2:]
5. 不是,x, y, z =1, 2, 3 只不过把整数 1~3 分别赋给x, y,z三个变量了。
所有的多对象的、逗号分隔的、没有明确用符号定义的这些集合默认的类型都是元组,自己在IDLE中键入以下代码,并体会一下:
>>> x, y, z = 1, 2, 3 >>> type(x) <class 'int'> >>> h = x, y, z >>> type(h) <class 'tuple'>
6. 1~6:列表、元组、元组、列表、元组、元组
列表、元组、列表、元组、元组、列表
7.
>>> tuple2 = (i**2 for i in range(0,4))
>>> print(tuple2)
<generator object <genexpr> at 0x000001EA2C7AA390>
>>> list(tuple2)
[0, 1, 4, 9]
>>> tuple2 = (i**2 for i in range(0,4))
>>> type(tuple2)
<class 'generator'> #产生了生成器
>>> tuple2.__next__()
0
>>> tuple2.__next__()
1
>>> tuple2.__next__()
4
>>> tuple2.__next__()
9
小甲鱼:Python3 木有“元组推导式”,为嘛?没必要丫,有了“列表推导式”已经足够了。
8. 课堂重点:
- 列表(list)可任意修改其中的元素,而元组不行。不能随意插入或删除甚至改变里面的元素。
- 创建元组(tuple)在大部分的时候用小括号,但元组的标志性符号是:不是小括号!!是逗号!
创建单个元素的元组:tuple = (1,)或者tuple = 1, - 元组支持索引,比如:索引元组的元素:tuple[1]
- 元组支持删除,但只能一次性把整个元组删除,不能删除其中的元素,比如:del tuple2
- 元组支持利用切片拼接的方式间接加入元素:temp = ('1', '2', '3', '4')
temp = temp[:2]+('怡景',)+temp[2:]
新的元组被贴上tempe的标签,旧的元组失去了标签,之后会被python的回收机制自动释放掉。面向对象的高级语言,字符串、元组、固定分配的内存当它们没有标签指向它的时候,都会自动释放掉。 - 元组支持的操作符:
拼接操作符:+
重复操作符:* 比如:8*(8,) = (8,8,8,8,8,8,8,8)乘号此处的额功能是重复操作。
成员操作符:in/ not in
关系操作符:> <
逻辑操作符:and or - 元组的内置函数:
比较两个元组的元素:operator.eq(tuple1, tuple2) 需要import operator
计算元祖元素个数:len()
返回元组中最大值/最小值:max()/min()
将列表转换为元组:tuple(list1)
参考答案:https://www.jianshu.com/p/c59def787e66
作者:无罪的坏人
链接:https://www.jianshu.com/p/c59def787e66
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。