小甲鱼python零基础013元组:戴上了枷锁的列表

一切拥有权力的人都容易滥用权力——孟德斯鸠《论法的精神》。

一、练习题

0. 请用一句话描述什么是列表?再用一句话描述什么是元组?

1. 什么情况下你需要使用元组而不是列表?

2. 当元组和列表掉下水,你会救谁?

3. 请将下图左边列表的内置方法与右边的注释连线,并圈出元组可以使用的方法。

(图片转载https://blog.csdn.net/junwei0206/article/details/44746877

4. 创建一个元组,什么情况下逗号和小括号必须同时存在,缺一不可?

5. x, y, z = 1, 2, 3 请问x, y, z是元组吗?

6. 请写出以下情景中应该使用列表还是元组来保存数据:

  1. 游戏中角色的属性:
  2. 你的身份证信息:
  3. 论坛的会员:
  4. 团队合作开发程序,传递给一个你并不了解具体实现的函数的参数:
  5. 航天火箭各个组件的具体配置参数:
  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
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值