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_tuple

print(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 = student
    print(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 = result

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

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

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

相关文章

【LeetCode: 380. O(1) 时间插入、删除和获取随机元素 + 数据结构设计】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

学习大数据,所需要Java基础(9)

文章目录 网络编程实现简答客户端和服务器端的交互编写客户端编写服务端 文件上传文件上传客户端以及服务器端实现文件上传服务器端实现&#xff08;多线程&#xff09;文件上传服务器端&#xff08;连接池版本&#xff09;关闭资源工具类 BS架构服务器案例案例分析BS结构服务器…

【C++】AVL树的插入、旋转

目录 一、AVL树介绍1.1 概念1.2 定义 二、AVL树的实现2.1 插入2.2 旋转2.2.1 左单旋2.2.2 右单旋2.2.3 左右双旋2.2.4 右左双旋 一、AVL树介绍 1.1 概念 AVL树是高度平衡的二叉搜索树&#xff0c;相比普通的二叉搜索树&#xff0c;它防止了变成单支树的情况。因为AVL树每插入…

bash: mysqldump: command not found

问题&#xff1a;在linux上执行mysql备份的时候&#xff0c;出现此异常 mysqldump命令找不到 解决&#xff1a; 1、找到mysql目录&#xff08;找到mysql可执行命令目录&#xff09; which mysql 有图可知&#xff0c;mysql安装在&#xff1a; /usr1/local/java/mysql 2、my…

redis 中的八大问题

前言 在分布式系统中&#xff0c;由于redis分布式锁相对于更简单和高效&#xff0c;成为了分布式锁的首先&#xff0c;被我们用到了很多实际业务场景当中。 但不是说用了redis分布式锁&#xff0c;就可以高枕无忧了&#xff0c;如果没有用好或者用对&#xff0c;也会引来一些意…

世界的本质是旋转(7) 野路子PSK 接收机上层同步的技巧与缺陷

上一篇文章里&#xff0c;我们以BPSK为例子&#xff0c;介绍了nPSK&#xff08;n2,4,8&#xff09;波形的接收、解调中的同步技术。 前文阐述的同步技术所工作的对象是复平面的坐标&#xff0c;X轴是实部、Y轴是虚部。当完成时钟、频率同步后&#xff0c;就获得了一串整数&…

sqlserver中将csv非空间数据(带点坐标)转为空间数据

1、导入csv数据 2、修改字段shape为空间字段 ALTER TABLE FJPOIHB66 ALTER COLUMN shape geometry;3、空间字段转字符串 UPDATE FJPOIHB66 SET shape geometry::STGeomFromText(CONVERT(nvarchar(254),shape), 4326);4、设置主键字段 5、即可

Instagram被封了?Ins封号的6个常见原因及防封技巧

现在&#xff0c;Instagram 对于跨境电商和社交媒体营销人员来说十分重要。然而&#xff0c;许多用户发现他们的Instagram刚注册就被封&#xff0c;大家要知道 Instagram 和 Facebook 等其他平台一样&#xff0c;对账户管理的管控机制非常严格&#xff0c;不过&#xff0c;Inst…

nut-ui组件库icon中使用阿里图标

1.需求 基本每个移动端组件库都有组件 icon组件 图标组件、 但是很多组件库中并找不到我们需要的图标 这时候 大家有可能会找图标库 最大众的就是iconfont的图标了 2.使用 有很多方式去使用这个东西 比如将再限链接中的css引入 在使用 直接下载图标 symbol 方式 等....…

【群环域】多项式环基础

目录 一. 多项式环的基本定义 二. 环与多项式环 三. 多项式环的性质 四. 多项式环的次数&#xff08;degree&#xff09; 五. 多变量多项式 六. 多变量多项式环R的同态 一. 多项式环的基本定义 令R代表环&#xff08;Ring&#xff09;&#xff0c;多项式环中x对应的系数…

【C语言】自定义类型:结构体

1. 结构体类型的声明 1.1 结构体回顾 结构是⼀些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 1.1.1 结构的声明 struct tag {member-list; }variable-list; 例如描述⼀个学⽣&#xff1a; struct Stu {char name[20];//名字int age;//年…

【C语言】strcpy函数的超细节详解(什么是strcpy,如何模拟实现strcpy?)

目录 一、观察strcpy()库函数的功能与实现 二、模仿实现strcpy()函数 &#x1f50d;优化代码 &#x1f50d;assert断言拦截 &#x1f50d;const修饰常量指针 &#x1f50d;返回值的加入 三、共勉 一、观察strcpy()库函数的功能与实现 首先我们先来观察一下库函数strcpy去实现…

forward请求转发、include请求转发

forward请求转发&#xff0c;执行到这里就请求转发去执行Servlet4 include请求转发在执行完Servlet4之后&#xff0c;还会回来执行完。

五大模型大比拼:Claude3、Gemini、Sora、GPTs与GPT-4的优缺点分析

课程安排 学习内容 第一章 2024年AI领域最新技术 1.OpenAI新模型-GPT-5 2.谷歌新模型-Gemini Ultra 3.Meta新模型-LLama3 4.科大讯飞-星火认知 5.百度-文心一言 6.MoonshotAI-Kimi 7.智谱AI-GLM-4 第二章 OpenAI开发者大会后GPT最新技术 1.最新大模型GPT-4 Turbo详细介绍…

鞋服品牌如何计算门店盈亏平衡?

在鞋服品牌的运营中&#xff0c;门店盈亏平衡是衡量门店经营效果的重要指标。盈亏平衡点意味着门店在达到这一销售水平时&#xff0c;既能够覆盖所有固定和变动成本&#xff0c;又能实现零利润或零亏损。计算门店盈亏平衡有助于品牌更好地理解门店的经营状况&#xff0c;制定合…

解决LangChain构建知识向量库的过程中官方API无法自定义文本切割方式的问题-例如按行切分

自定义切分构成知识向量库的文本o(&#xffe3;▽&#xffe3;)ブ 在使用大模型和知识向量库进行问题问答的过程中&#xff0c;由于一些LangChain切分文本功能上的限制影响了模型的回答效果为了解决该问题故诞生此文档&#xff0c;如果有说的不对的&#xff0c;或者想交流的非…

Vue3中computed、watch、watchEffect的区别

三者都是侦听工具&#xff0c;实现的是观察者模式&#xff0c;横向对比 &#xff08;1&#xff09;依赖&#xff1a;指的是响应性依赖&#xff0c;也就是侦听 ref、reactive 这类具有响应性的对象。 &#xff08;2&#xff09;watch&#xff1a;默认情况下&#xff0c;被侦听对…

Spring AOP常见面试题

目录 一、对于AOP的理解 二、Spring是如何实现AOP的 1、execution表达式 2、annotation 3、基于Spring API&#xff0c;通过xml配置的方式。 4、基于代理实现 三、Spring AOP的实现原理 四、Spring是如何选择使用哪种动态代理 1、Spring Framework 2、Spring Boot 五…

CUDA入门之统一内存

原文来自CUDA 编程入门之统一内存 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#xff08;HPC&#xff09;开发基础教程 &#x1f380;CSDN主页 发狂的小花 &#x1f304;人生秘诀&#xff1a;学习的本质…

X64 页表结构

PML4&#xff08;Page Map Level 4&#xff09;是x86-64架构中用于管理虚拟内存地址翻译的四级页表结构之一。它是一种树形结构&#xff0c;由多个页目录表&#xff08;Page Directory Pointer Table&#xff0c;PDPT&#xff09;组成&#xff0c;每个PDPT有512个指向下一级页表…