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博客

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

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

相关文章

【Python】【Matplotlib】fig, ax = plt.subplots() 返回的fig和ax是什么?

【Python】【Matplotlib】fig, ax plt.subplots() 返回的fig和ax是什么&#xff1f; &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&a…

求职干货!如何自信地进行自我介绍和面试问答!

面试在求职过程中扮演着至关重要的角色。它不仅是雇主评估候选人能力和适应性的关键环节&#xff0c;也是候选人展示自我、展示技能和经验的绝佳机会。通过面试&#xff0c;雇主可以更直接地了解候选人的沟通能力、解决问题的能力以及团队合作精神&#xff0c;这些都是成功工作…

ChatGPT GPT4科研应用、数据分析与机器学习、论文高效写作、AI绘图技术

原文链接&#xff1a;ChatGPT GPT4科研应用、数据分析与机器学习、论文高效写作、AI绘图技术https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247596849&idx3&sn111d68286f9752008bca95a5ec575bb3&chksmfa823ad6cdf5b3c0c446eceb5cf29cccc3161d746bdd9f2…

实例成员、静态成员

一、静态成员先于实例成员存在 类被加载到内存时&#xff0c;静态变量分配内存空间&#xff0c;静态方法分配入口地址 只有创建对象之后&#xff0c;实例变量分配内存空间&#xff0c;实例方法分配入口地址 当再创建对象时&#xff0c;实例方法不再分配入口地址&#xff0c;…

【Java从发入门到精通】Java StringBuffer 和 StringBuilder 类

Java StringBuffer 和 StringBuilder 类 当对字符串进行修改的时候&#xff0c;需要使用 StringBuffer 和 StringBuilder 类。 和 String 类不同的是&#xff0c;StringBuffer 和 StringBuilder 类的对象能够被多次的修改&#xff0c;并且不产生新的未使用对象。 在使用 Stri…

蓝桥杯[OJ 3412]-最小化战斗力差距-CPP-贪心

目录 一、问题描述&#xff1a; 二、整体思路&#xff1a; 三、代码&#xff1a; 一、问题描述&#xff1a; 二、整体思路&#xff1a; 首先每个值都有可能为min(b)&#xff0c;那么对于每个可能为min(b)的值&#xff0c;要使得max(a)尽可能小&#xff0c;因此枚举所有相差最…

高颜值抓包工具Charles,实现Mac和IOS端抓取https请求

Hi&#xff0c;大家好。在进行测试的过程中&#xff0c;不可避免的会有程序报错&#xff0c;为了能更快修复掉Bug&#xff0c;我们作为测试人员需要给开发人员提供更准确的报错信息或者接口地址&#xff0c;这个时候就需要用到我们的抓包工具。 常见的抓包工具有Fiddler、Char…

【NR技术】 3GPP支持无人机服务的关键性能指标

1 性能指标概述 5G系统传输的数据包括安装在无人机上的硬件设备(如摄像头)收集的数据&#xff0c;例如图片、视频和文件。也可以传输一些软件计算或统计数据&#xff0c;例如无人机管理数据。5G系统传输的业务控制数据可基于应用触发&#xff0c;如无人机上设备的开关、旋转、升…

Oracle之ADG与DG的区别?

在上云后的Oracle数据灾备场景中&#xff0c;我们经常听到DBA迁移工程师讲到“在这个项目中用ADG进行数据实时备份&#xff0c;ADG比DG更好&#xff01;”。究竟ADG作Oracle数据灾备的优势在什么地方&#xff1f; 一、ADG主要解决了DG时代读写不能并行的问题 DG时代的数据同步…

c# winform部门管理系统

c# winform部门管理系统 数据库SQL语句脚本代码 CREATE TABLE Department(DepartmentID INT PRIMARY KEY IDENTITY(1,1),Name NVARCHAR(50) NOT NULL ); SELECT * FROM Department -- 插入部门数据 INSERT INTO Department (Name) VALUES (人力资源部); INSERT INTO Departmen…

【c 语言 】移位操作符详解

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;C语言 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进步&…

C++感受1-打开浏览器,线上玩转C++

介绍了五款在线编译、编译、运行的C线上环境。并选择其中的 “在线GDB” 网站动手编写、运行第一个C程序 “Hello World”&#xff0c;同时和线下IDE进行对比。 1. 课堂视频 打开浏览器&#xff0c;线上玩转C 2. 在线C编译环境对比 onlinegdb &#xff1a; www.onlinegdb.comr…

汽车大灯汽车尾灯破裂裂纹破损破洞掉角崩角等问题能修复吗?修复灯罩需要多久时间?

汽车大灯汽车尾灯破裂裂纹破损破洞掉角崩角等问题基本是可以修复的。 修复汽车灯罩的时间取决于多个因素&#xff0c;如灯罩的破损程度、修复方法的选择以及维修店的工作效率等。 一般来说&#xff0c;如果灯罩的破损程度较轻&#xff0c;仅需要进行简单的修复或翻新&#xf…

如何考上东南大学计算机学院?

东南大学招生学院是计算机科学与工程学院、苏州联合研究生院&#xff0c;复试公平&#xff0c;不歧视双非考生&#xff0c;985院校中性价比较高&#xff0c;但近年热度在逐年上涨&#xff0c;需要警惕。 建议报考计算机科学与工程学院081200计算机科学与技术专业目标分数为380…

帮管客CRM(jiliyu)接口SQL注入漏洞

文章目录 前言声明一、漏洞描述二、影响版本三、漏洞复现四、修复建议 前言 帮管客CRM客户管理系统专注于为企业提供crm客户关系管理、crm管理系统、crm软件产品及企业销售管理流程解决方案服务,助力企业业绩增长。 声明 请勿利用文章内的相关技术从事非法测试&#xff0c;由…

jdk17出现错误无法初始化主类 和NoClassDefFoundError:Vector的解决方法

概述&#xff1a;网上流传文章大多都是编译和运行都加下面这串代码 --add-modulesjdk.incubator.vector我估计他们大多都是复制粘贴的文章&#xff0c;这种东西就是电子垃圾&#xff0c;在idea中&#xff0c;大多人都习惯用maven来构建java项目&#xff0c;接下来我将讲解使用…

【C++】string学习 — 手搓string类项目

手搓string项目 1 string类介绍2 功能描述3 代码实现3.0 基础框架3.1 构造函数 和 析构函数3.2 流操作符重载 和 尾插扩容3.4 运算符重载3.5 实用功能3.6 迭代器模拟 总结Thanks♪(&#xff65;ω&#xff65;)&#xff89;谢谢阅读&#xff01;&#xff01;&#xff01;下一篇…

LeetCode:206.反转链表

206. 反转链表 解题过程 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; this.next next; …

如何使用 Langchain、Ollama 和 Streamlit 构建 RAG

一、先决条件&#xff1a;您需要了解什么 在深入讨论技术细节之前&#xff0c;我们先概述一下先决条件。Python 的基础知识至关重要&#xff0c;因为它是我们将使用的主要语言。熟悉机器学习和自然语言处理的基本概念将帮助您更轻松地掌握这些概念。此外&#xff0c;对 Langch…

蓝桥杯练习系统(算法训练)ALGO-973 唯一的傻子

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 腿铮找2255有点事&#xff0c;但2255太丑了&#xff0c;所以腿铮不知道他的长相。正愁不知道到如何找他的时候&#xff0c;…