Python元组(Tuple)深度解析!

news2024/12/23 16:27:27

目录

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

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

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

相关文章

portapack-h2使能hackrf

这两天弄了一块portapack扩展板 &#xff0c;可以用来脱机使能hackrf,简单的说&#xff0c;这是一块自带屏幕&#xff0c;预装gnuradio环境的单片机&#xff0c;通过GPIO插入hackrf,可以使能hackrf&#xff0c;脱机运行一些无线电测试程序。 购置的拓展先不用着急装扩展板&…

Web3 之路:构建开放、透明的数字生态系统

随着区块链技术的迅速发展&#xff0c;Web3正在成为数字世界的新引擎&#xff0c;重新定义着我们的生活和工作方式。在这个数字化的时代&#xff0c;我们目睹着一个全新的网络生态正在逐渐成形&#xff0c;其中开放性和透明性是其核心特征。让我们深入探讨&#xff0c;Web3如何…

一款适合程序员开发复杂系统的通用平台——JNPF 开发平台

在过去&#xff0c;很多开发工具更侧重代码编辑&#xff0c;针对数据库增删改查&#xff08;CRUD&#xff09;类的 Web 系统开发&#xff0c;在界面设计、前后端数据交互等环节主要还是靠写代码&#xff0c;效率比较低。目前很多所谓的低代码开发平台&#xff0c;大多数也都是基…

【格与代数系统】格与哈斯图

【格与代数系统】格与代数系统汇总 目录 常见的偏序关系 覆盖 哈斯图 例1 例2 例3 格与哈斯图 例1 例2 常见的偏序关系 偏序关系&#xff1a;自反性反对称性传递性 整数集合上的小于等于&#xff08;大于等于&#xff09;关系、幂集中的包含关系 、正整数的整除和整…

羊大师分析羊奶的喝法,都有什么讲究?

羊大师分析羊奶的喝法,都有什么讲究&#xff1f; 羊奶的喝法确实有一些讲究&#xff0c;以下是一些主要的注意事项&#xff1a; 温度控制&#xff1a;羊奶不宜煮沸喝&#xff0c;加热时最好保持在50℃&#xff0d;60℃之间&#xff0c;以避免破坏其营养成分。 饮用时间&…

【TypeScript】对TypeScript的理解?与JavaScript的区别?

1 是什么 TypeScript是JS的类型超集&#xff0c;支持ES6语法&#xff0c;支持面向对象编程的概念&#xff0c;如类、接口、继承、泛型等。 是一种静态类型检查的语言&#xff0c;提供了类型注解&#xff0c;在代码编译阶段就可以检查出数据类型的错误 同时扩展了JS语法 &#x…

白酒:陈酿过程中的理化变化与香味成分的转化

在豪迈白酒的陈酿过程中&#xff0c;理化变化和香味成分的转化是形成与众不同风味和品质的重要环节。云仓酒庄深入了解和掌握陈酿过程中的理化变化规律&#xff0c;以及香味成分的转化机制&#xff0c;通过科学的方法和精细的管理&#xff0c;提升豪迈白酒的品质和口感。 首先&…

MongoDB官网查看 MongoClient 驱动API 文档的详细步骤

目录 MongoDB官网查看 MongoClient 驱动API 文档的详细步骤1、先进入[mongodb的官网](https://www.mongodb.com/zh-cn)&#xff0c;点击【服务器文档】2、点击这个 [MongoDB Documentation](https://www.mongodb.com/docs/) 文档。3、然后点开【Java】的驱动文档4、先查看同步的…

Linux系统部署火狐浏览器结合内网穿透实现公网访问

目录 前言 1. 部署Firefox 2. 本地访问Firefox 3. Linux安装Cpolar 4. 配置Firefox公网地址 5. 远程访问Firefox 6. 固定Firefox公网地址 7. 固定地址访问Firefox 结语 前言 作者简介&#xff1a; 懒大王敲代码&#xff0c;计算机专业应届生 今天给大家聊聊Linux系统…

2024会声会影永久免费版新功能软件特色及新功能

会声会影2024永久免费版是一款收到很多用户公认的极佳视频编辑软件&#xff0c;里面的每一个功能都特别的强悍你能够一键给图片视频添加特效非常的过瘾&#xff0c;赶快来一起下载试试吧。 会声会影2023-安装包&#xff1a; https://souurl.cn/gtyDFc 会声会影2023-安装包&…

新手如何快速上手学习单片机?

读者朋友能容我&#xff0c;不使博文负真心 新开专栏&#xff0c;期待与诸君共享精彩 个人主页&#xff1a;17_Kevin-CSDN博客 专栏&#xff1a;《单片机》 学习单片机是一个有趣且有挑战性的过程。单片机是一种微控制器&#xff0c;广泛应用于各种电子设备和嵌入式系统中。在这…

如何利用音频转换器将多个MP3音频转换为OGG格式

现在&#xff0c;我们接触到的很多音频文件一般都是MP3格式的。但是我们偶尔也需要用到ogg格式的音频文件&#xff0c;所以就需要我们将MP3格式音频文件转换为ogg格式了&#xff0c;那么&#xff0c;如果想要将MP3格式文件转换为OGG格式该如何操作呢&#xff1f;相信很多朋友心…

Python实例☞组织结构案例

实例一&#xff1a; ❶要求☞ 使用while循环模拟用户登录 ❷程序代码☞ i1 while i<4: nameinput("请输入您的姓名&#xff1a;") passwardinput("请输入你的密码&#xff1a;") if name"鯨殤" and passward"88888": print(&quo…

实现简易可视化拖拽生成页面

1.背景 由于一些简单、重复的页面&#xff0c;需要开发&#xff0c;会耗费大量人力和物力。因此一般会利用低代码平台&#xff0c;进行拖拽生成&#xff0c;下面就是实现简易可视化拖拽生成页面 2 简易可视化拖拽生成页面具体实现 2.1 整体页面布局 整个页面分为顶栏、内容区…

Vue.set:Vue中的数据绑定利器

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

python xpath提取链家二手房

/    表示两个相邻元素节点关系&#xff0c;也可以说父子关系 用法示例&#xff1a;如果要找上述代码中的 a 标签&#xff0c;路径表达式为&#xff1a;div/a 注意&#xff1a;如果当前查找出来的标签有多个&#xff0c;比如上面查找到的 a 标签有3个&#xff0c;我们想要第2…

vue3项目报Parsing error: Cannot find module ‘typescript‘

vue3项目报Parsing error: Cannot find module ‘typescript’ 解决办法&#xff0c;安装typescript&#xff0c;然后一定记得 退出vscode&#xff0c;再重新打开项目即可。 npm install typescript --save-dev

Android中显式Intent和隐式Intent的区别

1、intent的中文名 称是意图&#xff0c;Intent是各个组件之间信息沟通的桥梁&#xff0c; 既能在Activity之间沟通&#xff0c;又能在Activity与Service之间沟通&#xff0c;也能在Activity与Broadcast之间沟通 **intent组成元素的列表说明**2、显式Intent&#xff0c;直接指定…

【MATLAB第98期】基于MATLAB的MonteCarlo蒙特卡罗结合kriging克里金代理模型的全局敏感性分析模型(有目标函数)

【MATLAB第98期】基于MATLAB的Monte Carlo蒙特卡罗结合kriging克里金代理模型的全局敏感性分析模型&#xff08;有目标函数&#xff09;【更新中】 PS:因内容涉及较多&#xff0c;所以一时半会更新不完 后期会将相关原理&#xff0c;以及多种功能详细介绍。 麻烦点赞收藏&#…

CMU 10-414/714: Deep Learning Systems --hw0

hw0 宏观上的步骤: softmax loss: 实现softmax loss代码 概念 softmax就是将结果映射到0~1之间,且所有结果相加为1(概率形式)cross-entropy loss就是计算 p ( x ) log ⁡ q ( x ) p(x)\log {q(x)} p(x)logq(x),此值可用于衡量实际输出与期望输出的距离,进而衡量预测模…