8天Python从入门到精通【itheima】-68(元组)

目录

65节——元组的定义和操作

1.学习目标

2.为什么要学习元组

3.元组的定义

4.定义元组的注意事项

5.元组的嵌套

6.元组的相关操作

【1】index方法

【2】count方法

【3】len方法

7.元组的遍历

【1】while循环进行元组的遍历

【2】for循环进行元组的变量

Python 元组遍历常见错误:TypeError: tuple indices must be integers or slices, not str

错误现象

错误原因

解决方法

方法 1:直接遍历元素(推荐,无需索引)

方法 2:通过索引遍历(需整数索引)

方法 3:使用 enumerate(同时获取索引和元素)

代码解析

总结

正确代码:

8.注意事项

元组中嵌套列表,嵌套的列表就可以修改了:

9.元组的特点

10.小节总结

11.案例练习:元组的特点

【1】案例需求

【2】代码实战

好了,又一篇博客和代码写完了,励志一下吧,下一小节等等继续:

李在明总统致Patrick的回信

1. 学习的价值:短期与长期的辩证关系

2. 健康休学:逆境中的隐藏礼物

3. 对抗信息噪音:用行动代替焦虑

4. 关于“无用”的恐惧:重新定义价值

最后赠言


65节——元组的定义和操作

1.学习目标

1.掌握元组的定义格式

2.掌握元组的特点

3.掌握元组的常用操作

2.为什么要学习元组

3.元组的定义

# 68节"""
演示tuple元组的定义和操作
"""# 定义元组
t1=(1,"Hello",True)   #tuple是关键字
t2=()
t3=tuple()
print(f"t1的类型是:{type(t1)},内容是:{t1}")
print(f"t2的类型是:{type(t2)},内容是:{t2}")
print(f"t3的类型是:{type(t3)},内容是:{t3}")
# 控制台输出结果:
# t1的类型是:<class 'tuple'>,内容是:(1, 'Hello', True)
# t2的类型是:<class 'tuple'>,内容是:()
# t3的类型是:<class 'tuple'>,内容是:()
#
# 进程已结束,退出代码为 0

4.定义元组的注意事项

若是元组内只有一个元素,这个元素后面记得加上括号。

# 定义单个元素的元组
t4=("hello")
print(f"t4的类型是:{type(t4)},内容是:{t4}")
# 控制台输出结果:
# t4的类型是:<class 'str'>,内容是:hello,这里没加逗号类型就是str
t4=("hello",)
print(f"t4的类型是:{type(t4)},内容是:{t4}")
# 控制台输出结果:
# t4的类型是:<class 'tuple'>,内容是:('hello',),这里加上了逗号,类型就变成了元组,所以在定义一个单个的元组,记得加上,

5.元组的嵌套

# 元组的嵌套
t5=((1,2,3),(4,5,6))
print(f"t5的类型是:{type(t5)},内容是{t5}")
# 控制台的输出结果:
# t5的类型是:<class 'tuple'>,内容是((1, 2, 3), (4, 5, 6))# 下标索引,取出内容
num=t5[1][2]
print(f"从嵌套元组中取出的数据是:{num}")
# 控制台的输出结果:
# 从嵌套元组中取出的数据是:6

6.元组的相关操作

注意:元组和列表的不同,就是元组不可以修改,因此元组的增删改查也就没有了,元组的相关操作相较于列表也是简单了许多。

【1】index方法

# 元组的操作:index查找方法
t6=("传智教育","黑马程序员","Python")
index=t6.index("黑马程序员")  #index方法的小括号内部,要放入元组的具体元素
print(f"在元组t6中查找黑马程序员,的下标是:{index}")
# 控制台的输出结果:
# 在元组t6中查找黑马程序员,的下标是:1

【2】count方法

# 元组的操作:count统计方法
t7=("传智教育","黑马程序员","黑马程序员","黑马程序员","黑马程序员","黑马程序员","黑马程序员","黑马程序员","黑马程序员","Python")
num=t7.count("黑马程序员")
print(f"在元组t7中,统计黑马程序员的数量有{num}个")

【3】len方法

# 元组的操作:len函数统计元组元素数量
t8=("传智教育","黑马程序员","黑马程序员","黑马程序员","Python")
len1=len(t8)
print(f"元组t8中,一共含有:{len1}个元素")#5

7.元组的遍历

【1】while循环进行元组的遍历

# 元组的遍历:while
t9=("传智教育","黑马程序员","黑马程序员","黑马程序员","Python")index=0
while index<len(t9):print(f"元组t9中的元素:{t9[index]}")index+=1

【2】for循环进行元组的变量

典型错误:

Python 元组遍历常见错误:TypeError: tuple indices must be integers or slices, not str

错误现象

运行以下代码时,报错 TypeError: tuple indices must be integers or slices, not str

 

python

t9 = ("传智教育", "黑马程序员", "黑马程序员", "黑马程序员", "Python")
for index in t9:print(f"元组t9中的元素:{t9[index]}")  # 报错行

错误原因

  1. 循环变量误解
    for index in t9 中,index 实际是元组的元素值(如 "传智教育" 是字符串),而非索引(整数)。
  2. 索引类型错误
    元组 t9[index] 要求 index 是整数或切片,但此处传入字符串(如 "传智教育"),导致类型不匹配。

解决方法

方法 1:直接遍历元素(推荐,无需索引)

python

for element in t9:print(f"元组t9中的元素:{element}")  # 直接使用元素值

方法 2:通过索引遍历(需整数索引)

python

for i in range(len(t9)):  # i 是整数索引(0,1,2,...)print(f"元组t9中的元素:{t9[i]}")

方法 3:使用 enumerate(同时获取索引和元素)

python

for index, element in enumerate(t9):print(f"索引 {index} 对应的元素:{element}")

代码解析

  • 错误代码问题:混淆了 “元素遍历” 和 “索引遍历”。for index in t9 是元素遍历index 存储元素值),但后续却当作索引使用(t9[index]),导致类型错误。
  • 正确逻辑
    • 若只需元素值,直接遍历(方法 1)。
    • 若需索引(如定位元素位置),用 range 或 enumerate(方法 2/3),确保索引为整数。

总结

元组遍历需明确:

 
  • 元素遍历for element in tuple(直接取元素值)。
  • 索引遍历for i in range(len(tuple)) 或 enumerate(索引为整数)。
    避免将元素值(如字符串)当作索引使用,可快速修复此类 TypeError
 

示例修正后代码(方法 1):

 

python

t9 = ("传智教育", "黑马程序员", "黑马程序员", "黑马程序员", "Python")
for element in t9:print(f"元组t9中的元素:{element}")

 

运行结果:

 

plaintext

元组t9中的元素:传智教育
元组t9中的元素:黑马程序员
元组t9中的元素:黑马程序员
元组t9中的元素:黑马程序员
元组t9中的元素:Python

 

通过以上分析,可清晰理解错误根源并掌握元组遍历的正确写法,避免类似类型错误。

正确代码:

# 元组的遍历:for
t9=("传智教育","黑马程序员","黑马程序员","黑马程序员","Python")
for element in t9:print(f"元组t9中的元素:{element}")# 控制台输出结果:
# 元组t9中的元素:传智教育
# 元组t9中的元素:黑马程序员
# 元组t9中的元素:黑马程序员
# 元组t9中的元素:黑马程序员
# 元组t9中的元素:Python
# 
# 进程已结束,退出代码为 0

8.注意事项

元组中嵌套列表,嵌套的列表就可以修改了:

t9=("传智教育","黑马程序员",[1,2,"itcast"])
t9[2][2]="世界上的煞笔真多!!!"
print(t9)
print(type(t9))
# 控制台输出结果:
# ('传智教育', '黑马程序员', [1, 2, '世界上的煞笔真多!!!'])
# <class 'tuple'>

9.元组的特点

经过上述对元组的学习,可以总结出列表有如下特点:


可以容纳多个数据


可以容纳不同类型的数据(混装)


数据是有序存储的(下标索引)


允许重复数据存在


不可以修改(增加或删除元素等)


支持for循环


多数特性和list一致,不同点在于不可修改的特性。

10.小节总结

11.案例练习:元组的特点

【1】案例需求

【2】代码实战

# 案例练习:元组的基本操作# 定义元组
my_tuple=("周杰伦",11,["football","music"])# 1.查询年龄所在的下标位置
position=my_tuple.index(11)
print(position)  #1# 2.查询学生的姓名
name=my_tuple[0]
print(name) #周杰伦# 3.删除学生中的爱好football
# 先获取列表
list_hobby=my_tuple[2]
# 获取列表中的football元素的索引
index=list_hobby.index("football")
# 通过索引和获取到的列表的pop方法,删除指定元素
list_hobby.pop(index)
# 最后输出新的元组
print(my_tuple)# 4.增加爱好coding到list内
# 先获取列表
list_hobby=my_tuple[2]
# 增加列表中的新元素
list_hobby.append("coding")
# 输出新的元组
print(my_tuple)# 控制台的输出结果:
# 1
# 周杰伦
# ('周杰伦', 11, ['music'])
# ('周杰伦', 11, ['music', 'coding'])
#
# 进程已结束,退出代码为 0


好了,又一篇博客和代码写完了,励志一下吧,下一小节等等继续:

李在明总统致Patrick的回信

亲爱的Patrick:

你好!我是韩国总统李在明。收到你的来信,我深深理解你的困惑与不安。在这个快速变化的时代,年轻人面对未来的迷茫是普遍的,但你的自省与行动力——无论是坚持学习Python还是通过阅读寻求答案——都展现了你非凡的勇气和智慧。请允许我分享几点思考,希望能为你带来启发。


1. 学习的价值:短期与长期的辩证关系

你提到对Python学习的投入是否“徒劳”,这让我想起自己年轻时在人权律师道路上的挣扎。当时,许多人质疑:“为弱势群体发声能改变什么?”但正是那些看似“无回报”的积累,奠定了我后来的政治理念与行动力。

技术领域同样如此:

  • Python是未来的语言:从人工智能到数据分析,Python是科技创新的核心工具。你写下的每一篇博客、每一行代码,都是在构建不可替代的竞争力

  • 短期无回报 ≠ 长期无价值:就像种树,根扎得越深,未来枝叶越茂盛。你积累的技术思维、解决问题的能力,终会在某个机遇点爆发。


2. 健康休学:逆境中的隐藏礼物

你因健康休学,这并非停滞,而是重新校准人生坐标的契机

  • 牛顿在1665年因瘟疫返乡隔离期间,发现了万有引力;

  • 你此刻的沉淀,恰是远离浮躁、深度学习的黄金期。
    把“被迫休学”转化为“主动进化”——你已走在正确的路上。


3. 对抗信息噪音:用行动代替焦虑

互联网的杂音(“行业唱衰”“良莠不齐的信息”)本质是时代的阵痛。记住:

  • 真理在实践中显现:与其纠结“计算机行业是否饱和”,不如继续写代码、建项目。当你用Python解决一个实际问题时,答案自会清晰。

  • 书籍是你的护城河:在阅读中培养批判性思维,区分“情绪观点”与“事实逻辑”。推荐你读《深度工作》(卡尔·纽波特),它教你如何在信息洪流中守护专注力。


4. 关于“无用”的恐惧:重新定义价值

你说“害怕成为无用之人”,但真正的价值在于:

  • 持续成长的生命力:每天进步1%,一年后你将强大37倍(复利效应);

  • 利他的能力:用技术帮助他人(如为社区开发工具),你会看见自己的光芒。

你绝非“愚昧懒惰”——一个主动寻求智慧的人,永远走在觉醒的路上


最后赠言

Patrick,请相信:

“方向不是选出来的,而是走出来的。”

你今天的每一份坚持,都在为未来铺路。若偶尔疲惫,不妨回望这段代码:

python

复制

下载

# 你的人生算法  
while True:  effort = persist("学习+实践")  if effort.reaches_critical_mass():  success = suddenly()  # 成功会不期而至  break  

保持你的节奏,时间会给你答案。韩国有一句谚语:

“溪水穿石,非力也,恒也。”
(계곡 물이 돌을 뚫는 것은 힘이 아니라 꾸준함이다.)

期待未来听到你更多的好消息!随时欢迎来信交流。

祝健康与信心常伴!

李在明
大韩民国总统
2025年6月4日


(注:此信为虚拟创作,李在明总统的公开立场以实际为准)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

链表题解——环形链表【LeetCode】

141. 环形链表 方法一 核心思想&#xff1a; 使用一个集合 seen 来记录已经访问过的节点。遍历链表&#xff0c;如果当前节点已经存在于集合中&#xff0c;说明链表存在环&#xff1b;否则&#xff0c;将当前节点添加到集合中&#xff0c;继续遍历。如果遍历结束&#xff08;h…

【免费数据】1980-2022年中国2384个站点的水质数据

水&#xff0c;是生命之源&#xff0c;关乎着地球上每一个生物的生存与发展。健康的水生生态系统维持着整个水生态的平衡与活力&#xff1b;更是确保人类能持续获得清洁水源的重要保障。水质数据在水质研究、海洋生物量测算以及生物多样性评估等诸多关键领域都扮演着举足轻重的…

分享推荐高精度磁阻式磁编码器芯片

磁编码器其通过感应旋转磁场来实现角度、转速的测量&#xff0c;因此&#xff0c;相较于传统的光编码器&#xff0c;磁编码器对粉尘、污垢和油脂等污染物有很强的耐受性&#xff0c;即使在较为恶劣的环境中仍能够保持高分辨率与检测精度&#xff0c;安装和维护简捷方便&#xf…

Spring AI 项目实战(四):Spring Boot + AI + DeepSeek 超参数优化——智能化机器学习平台(附完整源码)

系列文章 序号文章名称1Spring AI 项目实战&#xff08;一&#xff09;&#xff1a;Spring AI 核心模块入门2Spring AI 项目实战&#xff08;二&#xff09;&#xff1a;Spring Boot AI DeepSeek 深度实战&#xff08;附完整源码&#xff09;3Spring AI 项目实战&#xff08…

高效VLM:VisionZip

论文&#xff1a;[2412.04467] VisionZip: Longer is Better but Not Necessary in Vision Language Models github&#xff1a;https://github.com/dvlab-research/VisionZip LLaVA论文&#xff1a;https://arxiv.org/abs/2310.03744 LLaVA仓库&#xff1a;https://github.…

华为设备OSPF配置与实战指南

一、基础配置架构 sysname HUAWEI-ABR ospf 100 router-id 1.1.1.1area 0.0.0.0network 10.1.1.0 0.0.0.255 # 将接口加入区域0 interface GigabitEthernet0/0/1ospf enable 100 area 0.0.0.0 # 华为支持点分十进制区域号bandwidth-reference 10000 # 设置10Gbps参考带宽…

区块链架构深度解析:从 Genesis Block 到 Layer 2

# 区块链架构深度解析&#xff1a;从 Genesis Block 到 Layer 2 目录 一、Genesis Block&#xff1a;区块链的起点 二、Layer 0&#xff1a;区块链的底层网络架构 三、Layer 1&#xff1a;核心协议层 &#x1f680; 四、Layer 2&#xff1a;扩展性解决方案 五、未来展望&a…

【位运算】丢失的数字(easy)

34. 丢失的数字&#xff08;easy&#xff09; 题⽬描述&#xff1a;方法一&#xff1a;排序解法&#xff08;位运算&#xff09;&#xff1a;C 算法代码&#xff1a;Java 算法代码&#xff1a; 题⽬链接&#xff1a; 268. 丢失的数字 题⽬描述&#xff1a; 给定⼀个包含 [0, n…

如何通过RL真正提升大模型的推理能力?NVIDIA提出长期强化学习训练框架ProRL

原文&#xff1a;https://mp.weixin.qq.com/s/QLFKvb8Ol3CX9uWKBXSrow 论文&#xff1a;ProRL: Prolonged Reinforcement Learning Expands Reasoning Boundaries in Large Language Models Abs&#xff1a;https://arxiv.org/abs/2505.24864 权重下载&#xff1a;https://hugg…

ORM 框架的优缺点分析

ORM 框架的优缺点分析 一、ORM 框架概述 ORM(Object-Relational Mapping)是一种将关系型数据库与面向对象编程进行映射的技术框架。它通过将数据库表映射为编程语言中的类,将记录映射为对象,将字段映射为属性,实现了用面向对象的方式操作数据库。 核心价值:ORM 在数据库和…

1. 数据库基础

1.1 什么是数据库 ⭐ mysql 本质是一种网络服务, 是基于 C(mysql) S(mysqld)的 网络服务. 存储数据用文件就可以了&#xff0c;为什么还要弄个数据库&#xff1f;文件保存数据存在以下缺点&#xff1a; 文件的安全性问题。文件不利于数据查询和管理。文件不利于存储海量数据。…

go语言学习 第5章:函数

第5章&#xff1a;函数 函数是编程中不可或缺的一部分&#xff0c;它封装了一段可重复使用的代码&#xff0c;用于执行特定的任务。在Go语言中&#xff0c;函数同样扮演着重要的角色。本章将详细介绍Go语言中函数的定义、调用、参数传递、返回值处理以及一些高级特性&#xff…

MapReduce 分布式计算模型

what&#xff1a;分解大数据集&#xff0c;并行处理&#xff0c;汇总结果&#xff08;分解组合思想&#xff09; 目的&#xff1a;SQL查询转换为MR&#xff0c;理解MR更好优化SQL 优点&#xff1a; 只需关注业务逻辑&#xff08;自定义函数map&#xff0c;reduce&#xff09…

RDMA简介3之四种子协议对比

RDMA协议共有四种子协议&#xff0c;分别为InfiniBand、iWARP、RoCE v1和RoCE v2协议。这四种协议使用统一的RDMA API&#xff0c;但在具体的网络层级实现上有所不同&#xff0c;如图1所示&#xff0c;接下来将分别介绍这四种子协议。 图1 RDMA四种子协议网络层级关系图 Infin…

LabelImg: 开源图像标注工具指南

LabelImg: 开源图像标注工具指南 1. 简介 LabelImg 是一个图形化的图像标注工具&#xff0c;使用 Python 和 Qt 开发。它是目标检测任务中最常用的标注工具之一&#xff0c;支持 PASCAL VOC 和 YOLO 格式的标注输出。该工具开源、免费&#xff0c;并且跨平台支持 Windows、Lin…

系统架构设计论文

disstertation 软考高级-系统架构设计师-论文&#xff1a;论文范围&#xff08;十大知识领域&#xff09;、历年论题、预测论题及论述过程、论文要点、论文模板等。 —— 2025 年 4 月 4 日 甲辰年三月初七 清明 目录 disstertation1、论文范围&#xff08;十大核心领域&#x…

数学复习笔记 26

5.25&#xff1a;这题还是有点难度的。主要是出现了新的知识点&#xff0c;我现在还没有那么熟悉这个新的知识点。这块就是&#xff0c;假设一个矩阵可以写成一个列向量乘以一个行向量的形式&#xff0c;这两个向量都是非零向量&#xff0c;那么这个矩阵的秩等于一。这个的原理…

[Java 基础]注释

注释在编程中扮演着非常重要的角色&#xff0c;它们是写给人类阅读的&#xff0c;而不是给计算机执行的。良好的注释可以极大地提高代码的可读性和可维护性。 为什么需要注释&#xff1f; 提高可读性&#xff1a; 注释可以解释代码的功能、实现思路、特殊处理等&#xff0c;帮…

TortoiseSVN账号切换

SVN登录配置及账号切换 本文主要为了解答svn客户端如何进行账号登录及切换不同权限账号的方式。 一、环境准备与客户端安装 安装TortoiseSVN客户端 ​​下载地址​​&#xff1a;TortoiseSVN官网 ​​安装步骤​​&#xff1a; 双击安装包&#xff0c;按向导完成安装后&#x…

5分钟了解JVM运行时数据区域

点击蓝字&#xff0c;关注我们 在 Java 程序运行期间&#xff0c;JVM 会划分出几块重要的内存区域&#xff0c;用来支撑类加载、方法调用、对象分配、线程执行等一切运行时行为。 这些区域构成了 JVM 的“运行时数据区”。 一、运行时数据区域概览图 二、Java 堆&#xff08;H…