python的元组

devtools/2024/10/18 18:27:08/

元组与列表的区别

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

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

元组

我们可以把上一关的期中考试成绩用元组的形式记录。原先列表的方括号,改成英文的圆括号就可以:

python">midterm_rank = ('妙玉', '薛宝钗', '贾元春', '王熙凤', '林黛玉', '贾巧姐', '史湘云','贾迎春', '贾宝玉', '李纨', '贾探春', '秦可卿', '贾惜春', '贾琏'
)

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

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

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

python">single = (1)
print(type(single))
# 输出:<class 'int'>

可见,上面的 (single) 和 single 一样,都是整数。

对于仅一个元素的元组,我们要特意加个逗号来声明:这是个元组。

python">single = (1,)
print(type(single))
# 输出:<class 'tuple'>

有了元组这种相对稳定的数据结构,我们就再也不怕手滑把数据改掉啦!

如果真的非要去改元组内部的数据,将会报错的哦:

python">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
# (类型错误:元组对象不支持删除操作)

除了上述例子外,其它的用于增加、修改或删除语句和方法都不能用在元组上,同学们可以自己试试~

但是,由于查询与分片操作并不会改变数据,所以我们说的两种列表元素的查询方式以及分片操作,在元组中是可用的。

python">students = ('林黛玉', '贾宝玉', '薛宝钗')print(students[1])
# 输出:贾宝玉print(students.index('贾宝玉'))
# 输出:1print(students[:2])
# 输出:('林黛玉', '贾宝玉')

另外,上一节所说的列表运算符,元组也都支持。用 in 查询元素是否在元组内;用 + 将两个元组叠加生成新元组;用 * 生成元素重复循环多次的新元组。

python">students = ('林黛玉', '贾宝玉', '薛宝钗')daiyu_in = '林黛玉' in students
print(daiyu_in)
# 输出:Truestudents_plus = students + students
print(students_plus)
# 输出:('林黛玉', '贾宝玉', '薛宝钗', '林黛玉', '贾宝玉', '薛宝钗')students_triple = students * 3
print(students_triple)
# 输出:('林黛玉', '贾宝玉', '薛宝钗', '林黛玉', '贾宝玉', '薛宝钗', '林黛玉', '贾宝玉', '薛宝钗')

下面,我们总结一下元组支持的操作吧:

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

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

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

python">students = ('林黛玉', '贾宝玉', '薛宝钗')# 用 list() 函数给数据“解锁”,生成一个相同元素的新列表
students_list = list(students)# 在新列表中修改元素
students_list[0] = '妙玉'# 再次给数据“上锁”
students = tuple(students_list)print(students)
# 输出:('妙玉', '贾宝玉', '薛宝钗'

列表和元组的区别,就好比我们四大发明中的 活字印刷 和 石碑 。

两者都可以刻字,

前者的各个字模可以根据需要随意调整,适用于书本、传单等内容变化较多的内容。

石碑是一块完整的石板,一旦刻好就不能再变,适用于要长期保存的重要内容。

我们在实际应用时,也应该根据不同的需求,选择列表或元组。

课后练习

宝玉一直非常佩服黛玉的才情,黛玉写的诗词,他喜欢抄下来一遍一遍读,觉得自己怕是怎么也赶不上了。这不,湘云黛玉又开了诗社,这次是以“柳絮”为题,黛玉便赋了一首《唐多令·咏絮》:

  • 粉堕百花州,香残燕子楼。一团团逐对成逑。
  • 飘泊亦如人命薄,空缱绻,说风流。
  • 草木也知愁,韶华竟白头!叹今生谁舍谁收?
  • 嫁与东风春不管。凭尔去,忍淹留。

宝玉见了这首词,欣羡不已,说要永久珍藏,便把这首词录进了元组 willow 中。

python">willow = ('粉堕百花州,','香残燕子楼。','一团团逐对成逑。','飘泊亦如人命薄,','空缱绻,','说风流。','草木也知愁,','韶华竟百头!','叹今生谁舍谁收?','嫁与东风春不管。','凭尔去,','忍淹留。'
)

可是宝玉马虎劲儿又犯了,把“韶华竟白头!”抄成了“韶华竟百头!”……这么好的词,录进元组中还能抄错!

我们赶快帮他补救一下,把这个 willow 中的这个错句改对,并把正确的词完整打印出来吧。

要求:

  1. 找出错句在 willow 中的位置;
  2. 将 willow 转换成列表,修改错句;
  3. 转换回元组后,打印修改正确后的 willow
python">willow = ('粉堕百花州,','香残燕子楼。','一团团逐对成逑。','飘泊亦如人命薄,','空缱绻,','说风流。','草木也知愁,','韶华竟百头!','叹今生谁舍谁收?','嫁与东风春不管。','凭尔去,','忍淹留。'
)# 查询错误的列
index = willow.index('韶华竟百头!')
# 转成list
willow_list = list(willow)
# 根据下标修改
willow_list[index] = '韶华竟白头!'
# 转回元组
will = tuple(willow_list)
# 打印元祖
print(will)# 转list
# willow_list = list(willow)
# 找出错句的位置
# wrong_index = willow_list.index('韶华竟百头!')
# 修改
# willow_list[wrong_index] = '韶华竟白头!'
# 转回元组
# will = tuple(willow_list)
# print(will)

学到这里,你应该已经可以熟练地使用列表来辅助自己的教学工作啦。虽然下半学期开始了,尽心尽力的你,还在研究同学们的期中考试成绩。

不过麻烦的是,排名表和分数在不同的列表里,具体排名数字也不直观,还有没有什么办法让我们更系统直观地了解这些数字呢?看来得学一学列表相关的高级操作了。

下一篇:列表的扩展操作


http://www.ppmy.cn/devtools/45257.html

相关文章

吴恩达深度学习个人笔记

1. 上一个视频提到的房地产领域,我们不就使用了一个普遍标准神经网络架构吗 而对于图像识别处理问题,我们则要使用卷积神经网络(Convolution Neural Network),即CNN。 对于序列数据,例如音频,有一个时间组件,随着时间的推移,音频被播放出来, 所以音频是最自然的表…

remote: You are not allowed to push code to this project.

场景&#xff1a; 在我的电脑上替师姐上传代码 可能账号密码与初始配置&#xff08;我自己的&#xff09;不同&#xff0c;需要更换一下才能上传到师姐的账号上&#xff1a; 查看原本的用户&#xff1a; $ git config user.name | git config user.email显示是我自己的&…

LED灯编程:一步步探索光的魔法

LED灯编程&#xff1a;一步步探索光的魔法 在数字时代&#xff0c;LED灯早已超越了传统的照明功能&#xff0c;成为编程与创意结合的完美载体。那么&#xff0c;LED灯怎么编程呢&#xff1f;本文将分四个方面、五个方面、六个方面和七个方面&#xff0c;带您走进LED灯编程的奇…

centos8stream 编译安装 php-rabbit-mq模块

官方GitHub&#xff1a;https://github.com/php-amqp/php-amqp 环境依赖安装 dnf install cmake make -y 1.安装rabbitmq-c cd /usr/local/src/ wget https://github.com/alanxz/rabbitmq-c/archive/refs/tags/v0.14.0.tar.gz tar xvf v0.14.0.tar.gz cd rabbitmq-c-0.14.0/…

从0开始制作微信小程序

目录 前言 正文 需要事先准备的 需要事先掌握的 什么是uniapp 平台应用的分类方式 什么是TypeScript 创建项目 项目文件作用 源码地址 尾声 &#x1f52d; Hi,I’m Pleasure1234&#x1f331; I’m currently learning Vue.js,SpringBoot,Computer Security and so on.&#x1…

100道面试必会算法-28-排序链表

100道面试必会算法-28-排序链表 链表排序是一个常见的算法问题&#xff0c;通常要求将一个无序的链表按照升序排列。针对这个问题&#xff0c;我们可以使用归并排序算法&#xff0c;因为归并排序在链表结构中表现出色&#xff0c;具有O(n log n)的时间复杂度&#xff0c;并且能…

初始C++

感谢大佬的光临各位&#xff0c;希望和大家一起进步&#xff0c;望得到你的三连&#xff0c;互三支持&#xff0c;一起进步 个人主页&#xff1a;LaNzikinh-CSDN博客 文章目录 前言一.引用二.内联函数三.类和对象总结 前言 之前讲c的命令空间和第一个程序的运行&#xff0c;继…

改进rust代码的35种具体方法-类型(二十)-避免过度优化的诱惑

上一篇文章-改进rust代码的35种具体方法-类型(十九)-避免使用反射 “仅仅因为Rust允许您安全地编写超酷的非分配零复制算法&#xff0c;并不意味着您编写的每个算法都应该是超级酷的、零复制和非分配的。”-trentj 这本书中的大多数项目都旨在帮助现有程序员熟悉Rust及其成语。…