python的元组

元组与列表的区别

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

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

元组

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

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

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

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

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

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

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

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

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

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

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

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

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

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

students = ('林黛玉', '贾宝玉', '薛宝钗')

print(students[1])
# 输出:贾宝玉

print(students.index('贾宝玉'))
# 输出:1

print(students[:2])
# 输出:('林黛玉', '贾宝玉')

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

students = ('林黛玉', '贾宝玉', '薛宝钗')

daiyu_in = '林黛玉' in students
print(daiyu_in)
# 输出:True

students_plus = students + students
print(students_plus)
# 输出:('林黛玉', '贾宝玉', '薛宝钗', '林黛玉', '贾宝玉', '薛宝钗')

students_triple = students * 3
print(students_triple)
# 输出:('林黛玉', '贾宝玉', '薛宝钗', '林黛玉', '贾宝玉', '薛宝钗', '林黛玉', '贾宝玉', '薛宝钗')

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

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

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

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

students = ('林黛玉', '贾宝玉', '薛宝钗')

# 用 list() 函数给数据“解锁”,生成一个相同元素的新列表
students_list = list(students)

# 在新列表中修改元素
students_list[0] = '妙玉'

# 再次给数据“上锁”
students = tuple(students_list)

print(students)
# 输出:('妙玉', '贾宝玉', '薛宝钗'

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

两者都可以刻字,

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

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

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

课后练习

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

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

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

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

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

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

要求:

  1. 找出错句在 willow 中的位置;
  2. 将 willow 转换成列表,修改错句;
  3. 转换回元组后,打印修改正确后的 willow
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)

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

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

下一篇:列表的扩展操作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/669610.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络研究观-20240601

新战争时代的商业风险 美国人已经将战争视为遥远战场上发生的事件。然而&#xff0c;网络空间打破了这种看法&#xff0c;让全球战争的真正影响来到了美国家门口。 攻击不再局限于遥远的战场&#xff0c;而是在最意想不到的时间和地点发动袭击。 谁将主宰第五次工业革命&…

智慧校园的机遇与挑战

随着5G、物联网、大数据等技能的日渐老练&#xff0c;数字化正在渗透到各行各业中&#xff0c;为事务立异和价值增加供给支撑。在教育职业&#xff0c;运用智能化体系赋能教育办理越来越受欢迎&#xff0c;教育信息化方针一再出台&#xff0c;进一步加快了智慧校园落地的脚步。…

Dijkstra求最短路篇一(全网最详细讲解两种方法,适合小白)(python,其他语言也适用)

前言&#xff1a; Dijkstra算法博客讲解分为两篇讲解&#xff0c;这两篇博客对所有有难点的问题都会讲解&#xff0c;小白也能很好理解。看完这两篇博客后保证收获满满。 本篇博客讲解朴素Dijkstra算法&#xff0c;第二篇博客讲解堆优化Dijkstra算法Dijkstra求最短路篇二(全网…

联合和枚举(自定义类型)

1.枚举&#xff08;关键字&#xff1a;enum) 1.1枚举类型的声明 把可能的值一一列举 赋的值是可能取值 1.2枚举类型的优点 1&#xff09;增加代码的可读性和可维护性 2&#xff09;和#define定义的标识符比较枚举有类型检查&#xff0c;更加严谨 3&#xff09;便于调试&a…

【C++】list的使用(下)

&#x1f525;个人主页&#xff1a; Forcible Bug Maker &#x1f525;专栏&#xff1a; STL || C 目录 前言&#x1f525;操作list对象的接口函数&#xff08;opeartions&#xff09;spliceremoveremove_ifuniquemergesortreverse 结语 前言 本篇博客主要内容&#xff1a;STL…

智能合约引领:探索Web3的商业革新之路

随着区块链技术的迅速发展&#xff0c;智能合约作为其重要应用之一&#xff0c;正在逐步改变着商业世界的格局。Web3作为下一代互联网的代表&#xff0c;正引领着智能合约在商业领域的广泛应用和创新。本文将深入探讨智能合约在Web3中的作用&#xff0c;以及智能合约如何引领着…

「计网」网络初识

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;计网 &#x1f387;欢迎点赞收藏加关注哦&#xff01; 网络初识 &#x1f349;IP 地址 & 端口号&#x1f349;网络协议&#x1f34c;TCP/IP 网络协议 &#x1f349;封装和分用&#x1f349…

Xcode设置cocoapods库的最低兼容版本

目录 前言 1.使用cocoapods遇到的问题 2.解决办法 1.用法解释 1. config.build_settings: 2.IPHONEOS_DEPLOYMENT_TARGET 2.使用实例 3.注意事项 1.一致性 2.pod版本 前言 这篇文章主要是介绍如何设置cocoapods三方库如何设置最低兼容的版本。 1.使用cocoapods遇到的…

小红书图片视频下载利器,无水印!

在刷小红书时&#xff0c;总能看到一些博主发的好看的壁纸或者视频&#xff0c;想下载下来做头像或者设置为手机电脑的桌面。不过众所周知&#xff0c;直接保存的图片和视频都是有水印的&#xff0c;那如何去掉水印呢&#xff1f; 有些朋友肯定说&#xff0c;我知道有去水印的…

如何区分解析亚马逊网站产品搜索结果页HTM代码中广告位( Sponsored)和自然位的产品ASIN及排名

在开发亚马逊产品广告排名插件的时候需要通过页面HTML代码分别找出属于广告位和自然搜索结果的产品ASIN及排名&#xff0c;所以需要找到区分广告位和自然搜索结果的HTML代码属性&#xff1a; 所有搜索结果页的产品不管是广告位还是自然位&#xff0c;都包括在 标签里&#xff…

服务器数据恢复—服务器raid常见故障表现原因解决方案

RAID&#xff08;磁盘阵列&#xff09;是一种将多块物理硬盘整合成一个虚拟存储的技术&#xff0c;raid模块相当于一个存储管理的中间层&#xff0c;上层接收并执行操作系统及文件系统的数据读写指令&#xff0c;下层管理数据在各个物理硬盘上的存储及读写。相对于单独的物理硬…

kali中切换python版本

kali中切换python版本 在日常使用的过程中&#xff0c;可以通过一些工具来做打靶环境&#xff0c;或者工具的启动&#xff0c;都和python关联&#xff0c;而有时存在工具安装&#xff0c;或者运行的时候出现报错&#xff0c;这时候极大可能是因为我们本地的kali中python的版本不…

安装pytorch深度学习模型时要知道自己的电脑显卡是否支持CUDA

安装pytorch深度学习模型时要知道自己的电脑显卡是否支持CUDA&#xff0c;如何知道自己的显卡是否支持呢&#xff1f;可以去下面的网站&#xff0c;打开后就可以见到如下图所示&#xff1a; CUDA | 支持的GPU | GeForce (nvidia.cn)

【Mac】XMind for mac(XMind思维导图)v24.04.10311软件介绍和安装教程

软件介绍 XMind for Mac是一款功能强大的思维导图软件。它具有以下主要特点&#xff1a; 1.多样化的思维导图功能&#xff1a;XMind for Mac提供了丰富的思维导图编辑功能&#xff0c;用户可以创建各种类型的思维导图&#xff0c;包括组织结构图、逻辑图、时间轴图等&#xf…

基于优化Morlet小波的一维信号瞬态特征提取方法(MATLAB R2018A)

小波分析方法近些年逐步得到发展的一门数学分析技术&#xff0c;它对许多学科都有十分重要的影响。与傅立叶变换等其他传统方法相比&#xff0c;小波分解的方法中所用的小波基有着多种多样的结构&#xff0c;总结来说又包括正交小波系与非正交小波系。正交小波在信号处理领域目…

超越传统插值:利用深度学习提升视频帧率与清晰度

视频帧率的提升是视频处理领域中一个重要问题&#xff0c;它直接影响到视频的流畅度和观感。随着技术的发展&#xff0c;人们对于视频质量的要求越来越高&#xff0c;尤其是在捕捉快速运动场景时&#xff0c;高帧率视频能够提供更加清晰和连贯的视觉效果。然而&#xff0c;传统…

(2024,Flag-DiT,文本引导的多模态生成,SR,统一的标记化,RoPE、RMSNorm 和流匹配)Lumina-T2X

Lumina-T2X: Transforming Text into Any Modality, Resolution, and Duration via Flow-based Large Diffusion Transformers 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 …

Dynamics CRM 修改新建记录的CreatedOn字段值

CRM在创建新记录时&#xff0c;一些系统属性例如创建者、创建时间是取当前创建记录的人以及当前的时间&#xff0c;而有时这些属性需要更改&#xff0c;例如创建时间&#xff0c;这个场景更多的用在数据迁移的时候&#xff0c;老数据有他的原始创建时间&#xff0c;不能因为迁移…

python在cmd中运行.exe文件时报错:不是内部或外部命令,也不是可运行的程序或批处理文件。的解决办法

添加系统环境变量&#xff1a; 设置环境变量&#xff0c;在用户变量里面添加 【PATH&#xff1a;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Windows\SysWOW64】 在系统变量里面添加,【变量名&#xff1a;ComSpec】 【变量值&#xff1a;%SystemRoo…

springboot+vue的养老院管理系统

免费获取方式↓↓↓ 项目介绍036&#xff1a; http://localhost:8080/ admin 123456 测试用户 123456 测试护工 123456 二、技术栈 所有场景都支持 适合零基础小白练手和实战&#xff1b;适合二次开发&#xff1b; 项目图片概览&#xff1a; 以上是对本项目的界面预览。 界…