写点什么

6. Python 元组,不可变的列表,滚雪球学 Python

发布于: 2021 年 02 月 11 日
6. Python 元组,不可变的列表,滚雪球学 Python

希望看到文章的 Python 学习爱好者可以坚持打卡,在评论区坚持跟橡皮擦卡学习的朋友,在 100 天之后,橡皮擦将送出神秘大奖

本系列文章将在2021年春节前完成,欢迎关注,点赞,评论 --- 梦想橡皮擦


六、Python 元组,不可变的列表


今天新学习的概念叫做元组,其实学元组还是离不开列表,第一个知识点是元组的英文 tuple 要牢牢记住,第一个知识点是元组与列表的区别,列表的元素可以修改,元组的元素不可以修改,所以元素又可以称为不可变的列表,好了元组学习完毕了。


6.1 元组的定义


列表用中括号 [] 进行定义,元组用小括号 () 进行定义,元组的语法格式如下:


# my_tuple 是元组变量名,可以任意命名my_tuple = (元素1,元素2,元素3...)
复制代码


元组中的每一个数据也称为元素,元素也可以是数字、字符串或者列表等内容,输出使用 print 函数即可。


特别注意如果元组内的元素只有一个,需要在定义的时候在元素的右侧增加一个英文逗号 ,,例如:


# 只有一个元素my_tuple = (元素1,)
复制代码


下面就在 PyCharm 中进行一下实际的编码吧。


# 声明一个元组对象my_tuple = (1, 2, 3)print(my_tuple)print(type(my_tuple))

# 声明一个元组对象my_tuple1 = ("www", "aaa", "ggg")print(my_tuple1)print(type(my_tuple1))
# 声明只有一个元素的元组对象my_tuple2 = ("www", )print(my_tuple2)print(type(my_tuple2))
复制代码


6.2 读取元组中的元素


有列表在前,该部分学期起来就比较简单了,在元组中获取元素也是通过中括号 [] 加上索引的方式,与列表保持一致。


列表也可以通过循环去输出,可以自行通过 for 循环进行尝试。


列表中的元素可以通过索引去修改,但是元组不可以,以下代码会出现错误。


# 声明一个元组对象my_tuple = ("www", "aaa", "ggg")my_tuple[1] = "good"print(my_tuple)
复制代码


该错误提示如下:


TypeError: 'tuple' object does not support item assignment
复制代码


原因为本篇博客开始提及的元组不允许修改元素,上述错误翻译之后表示 tuple 对象不支持赋值。


6.3 元组的其他知识补充


由于元组与列表太相似了,接下来的一些知识点只做简单罗列。


  • 切片适用于元组

  • 列表方法中不涉及修改列表元素的方法都可用于元组,例如 lencount ...,如果列表方法会对元素进行修改,那不可用于元组,例如 appendinsert... 如果想详细查阅,回忆 dir 方法。

  • 部分列表可用的内置函数同样适用于元组,例如 maxmin...


6.4 元组与列表转换


在开发代码的过程中,有时需要对列表与元组进行相互转换,该转换类似之前学习过的强制转换的过程,核心的内置函数为 listtuple


将元组修改为列表。


my_tuple = ("www", "aaa", "ggg")my_list = list(my_tuple)print(my_list)
复制代码


将列表修改为元组。


my_list = ["www", "aaa", "ggg"]my_tuple = tuple(my_list)print(my_tuple)
复制代码


6.5 内置函数 zip


函数 zip 可以将一个可迭代对象,如列表打包成元组,打包之后返回的是一个 zip 对象,说起来有点绕,而且应用的场景不是很明确,可以先看代码学习一下。


en_names = ["apple", "orange", "pear"]cn_names = ["苹果", "橘子", "梨"]
zipData = zip(en_names, cn_names)
print(zipData) # 打印 zipDataprint(type(zipData)) # 打印 zipData 数据类型print(list(zipData)) # 输出 zipData 中的数据内容
复制代码


输出结果:


<zip object at 0x0000024C1E4FF648><class 'zip'>[('apple', '苹果'), ('orange', '橘子'), ('pear', '梨')]
复制代码


通过代码你可以看到,zip 把两个列表的数据合并了,每个列表中对应索引位置的元素合并在了一个元组里面。上述代码中就出现了 apple苹果 对应,orange橘子 对应,pear 对应。


如果放在 zip 函数的列表参数长度不相同,那 zip 会选择元素最少的那个列表作为依据,形成对应关系。


en_names = ["apple", "orange"]cn_names = ["苹果", "橘子", "梨"]
zipData = zip(en_names, cn_names)
print(zipData) # 打印 zipDataprint(type(zipData)) # 打印 zipData 数据类型print(list(zipData)) # 输出 zipData 中的数据内容
复制代码


该代码第一个列表有 2 个元素,第二个列表有 3 个元素,最终输出的结果为:


<zip object at 0x0000026DE2F7F608><class 'zip'>[('apple', '苹果'), ('orange', '橘子')]
复制代码


如果在 zip 中的参数前面增加 * 符号,相当于解压,返回二维矩阵式。


代码如下:


en_names = ["apple", "orange"]cn_names = ["苹果", "橘子", "梨"]
zipData = zip(en_names, cn_names)
print(zipData) # 打印 zipData
unzipData = zip(*zipData)print(unzipData) # 打印 unzipData
print(list(unzipData)) # 打印 unzipData 内容
复制代码


6.6 元组的功能与应用场景


元组既然与列表这么相似,那为何 Python 还要专门设计一个元组数据类型来呢?


相比于列表,元组有如下优点。


  1. 因为其不可修改,可以保护数据;

  2. 元组在底层数据结构上比列表简单,占用的资源少,程序执行速度快;(说了也不用记住的知识)

  3. 元组很多时候回用作函数的返回值。(后续知识)


6.7 这篇博客的总结


元组与列表就像是两个相似的亲兄弟,只在外观上有一点点区别,核心的区别是一个可以被修改(列表),一个不可以被修改(元组),其它的差异都是基于此衍生出来的,所以掌握这个内容之后,你能对比着学会这两个知识点。


最后一碗毒鸡汤


只要坚持下去,总会有失败的一天。 O(∩_∩)O 哈哈~


**想学Python爬虫,可以订阅橡皮擦专栏哦~**




今天是持续写作的第 <font color="red">5</font> / 100 天。

如果你有想要交流的想法、技术,欢迎在评论区留言。


博主 ID:梦想橡皮擦,希望大家<font color="red">点赞</font>、<font color="red">评论</font>、<font color="red">收藏</font>。


发布于: 2021 年 02 月 11 日阅读数: 13
用户头像

爬虫 100 例作者,蓝桥签约作者,博客专家 2021.02.06 加入

6 年产品经理+教学经验,3 年互联网项目管理经验; 互联网资深爱好者; 沉迷各种技术无法自拔,导致年龄被困在 25 岁; CSDN 爬虫 100 例作者。 个人公众号“梦想橡皮擦”。

评论

发布
暂无评论
6. Python 元组,不可变的列表,滚雪球学 Python