Python元组(Tuple)深度解析!
目录
1. 什么是元组?
2. 创建元组
3.访问元组
4.元组的运算
5.修改元组不可行
6.元组的应用场景
前面的博客里,我们详细介绍了列表(List)这一种数据类型,现在我们来讲讲与列表相似的一种数据类型,元组(Tuple)。下表是元组与列表的对比:
| 特征 | 元组 | 列表 |
|---|---|---|
| 可变性 | 不可变 | 可变 |
| 性能 | 操作上更快 | 一些操作上比较慢 |
| 语法 | 使用圆括号 () | 使用方括号 [] |
在Python中的元组(Tuple)是一种不可变序列,它可以容纳任意数量的元素,这点和列表(List)是一样的。然而,元组与列表之间有着关键的区别,这些区别也使得元组在某些情况下更为适用。本文将深入探讨Python元组的特性、用法以及与其他数据类型的比较。
1. 什么是元组?
元组由一系列元素组成,并用小括号 ()括起来。元组中的元素可以是任何类型,包括数字、字符串、列表等等。如下图:

元组的特点:
-
元组是不可变的(Immutable),一旦创建了元组,就不能再修改其中的元素。意味着与列表相比,元组更加稳定和安全。
-
元组是有序的,这意味着元组中的元素会按照一定的顺序排列。
-
元组可以重复,这意味着元组中的元素可以出现多次。
2. 创建元组
创建元组只需使用圆括号 () 并在其中放置元素,元素之间用逗号 , 分隔。例如:
my_tuple = (1, 2, 3, 4, 5)
创建空元组:
empty_tuple = ()
创建只包含一个元素的元组:
single_element_tuple = (42,)
Notes:这里在元素后面加上逗号,是为了以区分它与普通的表达式不同,不加的话,这里就是括号运算。
3.访问元组
在Python中,元组(tuple)可以通过索引和切片来访问其中的元素。索引从 0 开始,一直到元组的长度减 1。下面我们定义一个元组,内容包含多种数据类型,为了帮助大家理解,示例代码如下:
# 定义元组
my_tuple = (1, "apple", True, 3.14, [5, 6, 7], {"name": "TiYong", "age": 25})# 使用索引访问单个元素
first_element = my_tuple[0] # 第一个元素
print("第一个元素:", first_element)second_element = my_tuple[1] # 第二个元素
print("第二个元素:", second_element)last_element = my_tuple[-1] # 最后一个元素
print("最后一个元素:", last_element)print("-" * 30) # 分隔线# 使用切片访问子序列
from_second_to_last = my_tuple[1:] # 从第二个到最后一个元素
print("从第二个到最后一个元素:", from_second_to_last)first_three_elements = my_tuple[:3] # 前三个元素
print("前三个元素:", first_three_elements)second_to_second_last = my_tuple[1:-1] # 第二个到倒数第二个元素
print("第二个到倒数第二个元素:", second_to_second_last)print("-" * 30) # 分隔线# 访问嵌套元素
first_value_in_list = my_tuple[4][0] # 访问列表元素中的第一个值
print("列表元素中的第一个值:", first_value_in_list)value_in_dict = my_tuple[5]["name"] # 访问字典元素中的值
print("字典元素中的值:", value_in_dict)print("-" * 30) # 分隔线# 使用负数索引
second_last_element = my_tuple[-2] # 倒数第二个元素
print("倒数第二个元素:", second_last_element)print("-" * 30) # 分隔线# 多层混合访问
age_value = my_tuple[5]["age"] # 获取字典中年龄的值
print("字典中年龄的值:", age_value)
具体输出如下:
第一个元素: 1
第二个元素: apple
最后一个元素: {'name': 'TiYong', 'age': 25}
------------------------------
从第二个到最后一个元素: ('apple', True, 3.14, [5, 6, 7], {'name': 'TiYong', 'age': 25})
前三个元素: (1, 'apple', True)
第二个到倒数第二个元素: ('apple', True, 3.14, [5, 6, 7])
------------------------------
列表元素中的第一个值: 5
字典元素中的值: TiYong
------------------------------
倒数第二个元素: [5, 6, 7]
------------------------------
字典中年龄的值: 25
4.元组的运算
在Python中,元组(tuple)是不可变的序列,它支持一些基本的运算,包括拼接、重复和成员检测等操作。
- 拼接元组:
元组可以通过加号 + 运算符进行拼接,创建一个新的元组。
tuple1 = (1, 2, 3)
tuple2 = ("apple", "banana", "cherry")result_tuple = tuple1 + tuple2
print(result_tuple) #输出:(1, 2, 3, 'apple', 'banana', 'cherry')
- 元组重复:
使用乘号 * 来重复一个元组的内容。
tuple3 = ("a", "b", "c")repeated_tuple = tuple3 * 3
print(repeated_tuple) #输出:('a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c')
- 成员检测:
使用 in 关键字来检查元素是否存在于元组中。
my_tuple = (1, 2, 3, 4, 5)print(3 in my_tuple) # True
print(6 in my_tuple) # False
- 元组长度:
使用 len() 函数获取元组的长度。
my_tuple = (1, 2, 3, 4, 5)print(len(my_tuple)) # 5
- 元组解包(Unpacking):
将元组中的元素解包到多个变量中。
my_tuple = (10, 20, 30)a, b, c = my_tupleprint(a) # 10
print(b) # 20
print(c) # 30
- 比较元组:
比较两个元组是否相等。
tuple1 = (1, 2, 3)
tuple2 = (1, 2, 3)
tuple3 = (3, 2, 1)print(tuple1 == tuple2) # True
print(tuple1 == tuple3) # False
5.修改元组不可行
前面我们一直强调:元组(tuple)是一种不可变的序列类型。这意味着一旦创建了元组,就不能对其进行修改。下面我们通过具体的代码,详细讲解,关于元组不可变性的几个重要知识点:
- 元组创建后不可修改:元组一旦创建了,其中的元素就不能被修改、添加或删除。
my_tuple = (1, 2, 3)
my_tuple[0] = 10 # 这行代码会导致错误,因为元组不可变######################
Traceback (most recent call last):File "Untitled-1.py", line 2, in <module>my_tuple[0] = 10 # 这行代码会导致错误,因为元组不可变
TypeError: 'tuple' object does not support item assignment
- 添加和删除元素是不允许的:与列表(list)不同,元组不支持
append()、insert()、remove()等方法来添加或删除元素。
my_tuple = (1, 2, 3)
my_tuple.append(4) # 会导致 AttributeError 错误del my_tuple[1] # 会导致 TypeError 错误 ######################
#报错如下:
Traceback (most recent call last):File "Untitled-1.py", line 2, in <module>my_tuple.append(4) # 会导致 AttributeError 错误
AttributeError: 'tuple' object has no attribute 'append'
- 元组拼接和重复会生成新元组:虽然不能直接修改现有元组,但可以通过拼接和重复操作生成新的元组。
tuple1 = (1, 2, 3)
tuple2 = ("a", "b", "c")result_tuple = tuple1 + tuple2 # 创建新的元组
print(result_tuple) # (1, 2, 3, 'a', 'b', 'c')repeated_tuple = tuple1 * 2 # 创建新的元组
print(repeated_tuple) # (1, 2, 3, 1, 2, 3)
- 修改元组需要重新赋值:虽然不能直接修改元组,但可以通过重新赋值来实现对元组的间接修改。
my_tuple = (1, 2, 3)
my_tuple = my_tuple + (4,) # 创建新的元组并赋值给原变量
print(my_tuple) # (1, 2, 3, 4)
- 元组作为字典键:由于元组不可变性,可以作为字典的键,而列表等可变类型则不能。
my_dict = {(1, 2): "apple", (3, 4): "banana"}
print(my_dict[(1, 2)]) # apple
6.元组的应用场景
在Python中,元组有很多应用场景,下面我们简单展示一些。
a.存储一组相关的数据:
# 定义一个包含学生信息的元组列表
students = [('Alice', 20, 'A'),('Bob', 21, 'B'),('Charlie', 19, 'A-'),('David', 22, 'B+')
]# 打印每个学生的信息
for student in students:name, age, grade = studentprint(f"Name: {name}, Age: {age}, Grade: {grade}")
b.作为函数的参数或返回值:
# 定义一个函数,返回两个数字的和与差组成的元组
def add_subtract(a, b):return (a + b, a - b)# 调用函数并获取返回的元组
result = add_subtract(10, 5)
sum_result, diff_result = resultprint(f"Sum: {sum_result}, Difference: {diff_result}")
c.用于集合运算:
# 定义两个元组
tuple1 = (1, 2, 3, 4, 5)
tuple2 = (4, 5, 6, 7, 8)# 求并集
union = set(tuple1) | set(tuple2)
print("Union:", union)# 求交集
intersection = set(tuple1) & set(tuple2)
print("Intersection:", intersection)# 求差集
difference = set(tuple1) - set(tuple2)
print("Difference:", difference)
元组的不可变性这一点,对于许多不可变的数据结构非常有用,那么更多的应用场景,需要大家下去探索。
那么,关于元组(tuple)数据类型及其操作的函数讲解和示例代码,基本上讲完了。大家可以尝试着跟着代码一起学习,如果后面还有补充的,我将继续为大家分享。
感谢您的关注,我们下一篇文章将继续学习记录python的下一个知识点。
如果感觉阅读对您还有些作用,可以评论留言,关注我。谢谢您的阅读!
往期学习:
Python安装教程(版本3.8.10)windows10
Linux系统:安装Conda(miniconda)
Conda快速安装的解决方法(Mamba安装)
VSCode安装教程(版本:1.87.0)Windows10
Python基础语法:从入门到精通的必备指南
Python的基本数据类型
Python数据类型间的转换(隐式、显式)-CSDN博客
Python基础知识:运算符详解-CSDN博客
Python基础知识:数字类型及数学函数详解-CSDN博客
Python字符串操作及方法详解!一篇就搞定!-CSDN博客
Python列表及其操作详解,从此不再迷茫!-CSDN博客
相关文章:
Python元组(Tuple)深度解析!
目录 1. 什么是元组? 2. 创建元组 3.访问元组 4.元组的运算 5.修改元组不可行 6.元组的应用场景 前面的博客里,我们详细介绍了列表(List)这一种数据类型,现在我们来讲讲与列表相似的一种数据类型,元组…...
排序 Comparable接口、Comparator接口
String类的Comparable接口 1、String类实现了Comparable<String>接口,并提供了compareTo方法的实现,因此,字符串对象(即String类型的实例)可以直接调用compareTo()方法来比较它们。2、String类的compareTo()方法…...
得帆助力大族激光主数据平台建设,用数据为企业生产力赋能
本期客户 大族激光科技产业集团股份有限公司(以下简称“大族激光”)是一家从事工业激光加工设备与自动化等配套设备及其关键器件的研发、生产、销售,激光、机器人及自动化技术在智能制造领域的系统解决方案的优质提供商,是国内激光…...
实名认证电子签署:防范合同纠纷,提升交易信任
当今社会,随着数字化和信息化的发展,电子合同已经成为商务活动中常见的签署方式。而在签署电子合同时进行实名认证,是为了确保合同的真实性、合法性和安全性。本文将从法律、技术和实际应用等方面详细解释为什么签署电子合同需要进行实名认证…...
c++ primer中文版第五版作业第十八章
仓库地址 文章目录 18.118.218.318.418.518.618.718.818.918.1018.1118.1218.1318.1418.1518.16位置一using声明 位置二using声明 位置一using指示 位置二using指示 18.1718.1818.1918.2018.2118.2218.2318.2418.2518.2618.2618.2818.2918.30 18.1 此时r是一个range_error类型…...
vue触发真实的点击 事件 跟用户行为一致
<template><div><button ref"myButton" click"handleClick">按钮</button></div> </template><script> export default {methods: {handleClick() {const button this.$refs.myButton;// 创建一个鼠标点击事件…...
Java进程CPU高负载排查
Java进程CPU高负载排查步骤_java进程cpu使用率高排查_YouluBank的博客-CSDN博客 【问题定位】使用arthas定位CPU高的问题_arthas cpu高_秋装什么的博客-CSDN博客 CPU飙升可能原因 CPU 上下文切换过多。 对于 CPU 来说,同一时刻下每个 CPU 核心只能运行-个线程&…...
Linux编程4.1 网络编程-前导
1、内容概述 网络的基本概念TCP/IP协议概述OSI和TCP/IP模型掌握TCP协议网络基础编程掌握UDP协议网络基础檹网络高级编程 2、计算机联网的目的 使用远程资源共享信息、程序和数据分布处理 3、基本概念 单服务与多客户端的进程间通信C/S client server 由于,跨计…...
【微信小程序】传参存储
目录 一、本地数据存储 wx.setStorage wx.setStorageSync 1.1、异步缓存 存取数据 1.2、同步缓存 存取数据 二、使用url跳转路径携带参数 2.1、 wx.redirectTo({}) 2.2、 wx.navigateTo({}) 2.3、 wx.switchTab({}) 2.4 、wx.reLaunch({}) 2.5、组件跳转 三、…...
计算机设计大赛 深度学习花卉识别 - python 机器视觉 opencv
文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 &a…...
ping多个IP的工具
Ping Tool 项目地址 python开发的IP搜索小工具 ping一个网段所有IP,显示结果查看某个ip地址开放监听的端口配置可保存...
Rust 的 Error 如何使用?
在 Rust 中,错误处理是一个重要且核心的概念。Rust 提供了一种强大的类型系统,允许你明确地处理可能出现的错误。std::error::Error trait 是 Rust 标准库中用于表示错误的基础 trait。实现这个 trait 的类型可以被用作错误类型,并且可以使用…...
Hack The Box-Crafty
目录 信息收集 rustscan whatweb WEB 漏洞利用 漏洞说明 漏洞验证 提权 get user.txt get Administrator 总结 信息收集 rustscan ┌──(root㉿ru)-[~/kali/hackthebox] └─# rustscan -a 10.10.11.249 --range0-65535 --ulimit5000 -- -A -sC [~] Automatically…...
高电平复位电路工作原理详解
单片机复位电路的作用是:使单片机恢复到起始状态,让单片机的程序从头开始执行,运行时钟处于稳定状态、各种寄存器、端口处于初始化状态等等。目的是让单片机能够稳定、正确的从头开始执行程序。一共分为:高电平复位,低…...
了AI而强行AI的做法,构成了人与AI对抗的宿命论
从 ChatGPT到文生图的 Stable Diffusion,再到文生视频的 Sora ,每次大语言模型的迭代,以及由此衍生的新产品,都让各行各业的企业主、从业者们,感到无所适从。 普通人可以借助AI的力量“逆天改命”吗? 10多…...
【性能测试】Jmeter+InfluxDB+Grafana 搭建性能监控平台
一、背景 为什么要搭建性能监控平台? 在用 Jmeter 获取性能测试结果的时候,Jmeter自带的测试报告如下: 这个报告有几个很明显的缺点: 只能自己看,无法实时共享;报告信息的展示比较简陋单一,不…...
【YOLOv8模型网络结构图理解】
YOLOv8模型网络结构图理解 1 YOLOv8的yaml配置文件2 YOLOv8网络结构2.1 Conv2.2 C3与C2f2.3 SPPF2.4 Upsample2.5 Detect层 1 YOLOv8的yaml配置文件 YOLOv8的配置文件定义了模型的关键参数和结构,包括类别数、模型尺寸、骨干(backbone)和头部…...
付强:基于注意力机制的听觉前端处理 | 嘉宾公布
一、智能家居与会议系统专题论坛 智能家居与会议系统专题论坛将于3月28日同期举办! 智能会议系统它通过先进的技术手段,提高了会议效率,降低了沟通成本,提升了参会者的会议体验。对于现代企业、政府机构和学术界是不可或缺的。在这…...
C++_包装器
目录 1、包装器的用法 2、包装器的类型 3、包装器的作用 4、包装成员函数 5、bind(绑定) 5.1 bind的用法 5.2 bind减少参数个数 结语 前言: C11的包装器,总称为function包装器,而包装器又称适配器…...
3588板子部署yoloV5
一 :准备 ubuntu linux X86_64系统 a.安装anaconda b.创建虚拟环境 python3.8 二: 下载rknn-toolkit2 传送门 unzip 解压文件夹 三:pt转onnx模型 四:onnx转rknn模型 a:cd到rknn-toolkit2-master/rknn-toolkit2/packag…...
百考通智能任务书:贴合你的选题,拒绝空话假大空
毕业设计任务书是高校教学管理中的关键环节,它不仅标志着研究工作的正式启动,更是后续开题、实施、论文撰写和答辩全过程的行动依据。然而,许多学生在撰写时常常因不熟悉本专业写作规范、技术表达能力有限,或缺乏权威模板参考而陷…...
用Python和MNE库玩转BCI Competition IV 2a脑电数据集:从数据加载到可视化全流程
用Python和MNE库玩转BCI Competition IV 2a脑电数据集:从数据加载到可视化全流程当你第一次接触脑电信号处理时,面对原始数据文件可能会感到无从下手。BCI Competition IV 2a数据集作为脑机接口领域的经典基准数据,包含了9名受试者四种运动想…...
半导体元件(二极管/三极管/MOS管/IC)损坏诊断全解
半导体元件(二极管、三极管、MOS 管、集成电路)是 PCB 的核心功能单元,对过压、过流、ESD、高温极度敏感,损坏后直接导致电路功能失效、短路烧板。很多工程师维修时盲目更换芯片,不仅成本高,还易误判。一…...
使用TaotokenCLI工具一键配置开发环境中的API密钥
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用Taotoken CLI工具一键配置开发环境中的API密钥 在团队协作或个人开发中,为每个项目或成员手动配置大模型API密钥和…...
TVA注意力层INT8量化配置技巧
重磅预告:本专栏将独家连载系列丛书《智能体视觉技术与应用》部分精华内容,该书是世界首套系统阐述“因式智能体”视觉理论与实践的专著,特邀美国 TypeOne 公司首席科学家、斯坦福大学博士 Bohan 担任技术顾问。Bohan先生师从美国三院院士、“…...
艾尔登法环存档迁移终极指南:3分钟解决角色转移难题
艾尔登法环存档迁移终极指南:3分钟解决角色转移难题 【免费下载链接】EldenRingSaveCopier 项目地址: https://gitcode.com/gh_mirrors/el/EldenRingSaveCopier 还在为《艾尔登法环》存档版本不兼容而烦恼吗?EldenRingSaveCopier 是你的终极解决…...
League Akari:如何通过LCU API实现英雄联盟游戏流程的智能化管理?
League Akari:如何通过LCU API实现英雄联盟游戏流程的智能化管理? 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit Leag…...
Lovable电商网站搭建:如何用不到3人技术团队,72小时内上线PCI-DSS合规MVP版本?
更多请点击: https://codechina.net 第一章:Lovable电商网站搭建 Lovable 是一个面向中小商户的轻量级电商解决方案,采用现代 Web 技术栈构建,强调可扩展性、用户体验与快速部署能力。本章将指导你从零开始搭建一个具备商品展示、…...
Lovable内部工具开发方法论(从需求黑洞到用户自发推广的完整闭环)
更多请点击: https://kaifayun.com 第一章:Lovable内部工具开发方法论(从需求黑洞到用户自发推广的完整闭环) Lovable 方法论的核心不是交付功能,而是培育“工具依赖感”——当一线工程师在凌晨三点调试线上问题时&am…...
泰拉瑞亚地图编辑器:从像素画布到创意世界的蜕变之旅
泰拉瑞亚地图编辑器:从像素画布到创意世界的蜕变之旅 【免费下载链接】Terraria-Map-Editor TEdit - Terraria Map Editor - TEdit is a stand alone, open source map editor for Terraria. It lets you edit maps just like (almost) paint! It also lets you cha…...
