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

梦想橡皮擦
• 阅读 877

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

六、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)  # 打印 zipData
print(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)  # 打印 zipData
print(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 哈哈~

🌹🌹🌹🌹🌹🌹🌹🌹


点赞
收藏
评论区
推荐文章
浅梦一笑 浅梦一笑
4个月前
初学 Python 需要安装哪些软件?超级实用,小白必看!
编程这个东西是真的奇妙。对于懂得的人来说,会觉得这个工具是多么的好用、有趣,而对于小白来说,就如同大山一样。其实这个都可以理解,大家都是这样过来的。那么接下来就说一下python相关的东西吧,并说一下我对编程的理解。本人也是小白一名,如有不对的地方,还请各位大神指出01名词解释:如果在编程方面接触的比较少,那么对于软件这一块,有几个名词一定要了解,比如开发环
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
梦想橡皮擦 梦想橡皮擦
1年前
7. ✎会查新华字典不?会。Python字典已经掌握了
学编程要简单、粗暴。更要有效,很多时候学的越多,忘得越快。但编程总有那么一天顿悟的时候,而顿悟的契机目前就是建立在你跟橡皮擦坚持打卡100天,在评论区坚持跟橡皮擦卡学习的朋友,在100天之后,橡皮擦将送出神秘大奖。七、查字典怎么查,Python字典就怎么用已经学完了列表与元组,那这两个都是按照顺序排列的,所以可以用索引取到值,本篇博
Stella981 Stella981
1年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Stella981 Stella981
1年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Stella981 Stella981
1年前
Python 元组Tuple概念和操作
元组概念:有序的不可变的元素集合和列表的区别就是,元组元素不能修改定义一个元素的写法(666,)t(666,)正确写法t(666)错误写法,括号当成优先级的括号了多个元素
Wesley13 Wesley13
1年前
MySQL查询按照指定规则排序
1.按照指定(单个)字段排序selectfromtable_nameorderiddesc;2.按照指定(多个)字段排序selectfromtable_nameorderiddesc,statusdesc;3.按照指定字段和规则排序selec
Stella981 Stella981
1年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
1年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
helloworld_34035044 helloworld_34035044
6个月前
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为