Python数据结构:元组(Tuple)详解

在这里插入图片描述

1.介绍和基础操作

  Python中的元组(Tuple)是不可变有序序列,可以容纳任意数据类型(包括数字、字符串、布尔型、列表、字典等)的元素,通常用圆括号() 包裹。与列表(List)类似,元组可以通过索引(Index)访问其元素,也可以使用切片(Slice)截取部分元素。但是,元组一旦创建,就无法修改其中的元素。
  输出时,元组都要由圆括号标注,这样才能正确地解释嵌套元组。输入时,圆括号可有可无,不过经常是必须的(如果元组是更大的表达式的一部分)。不允许为元组中的单个元素赋值,当然,可以创建含列表等可变对象的元组。

1.1 创建元组

# 使用一对空圆括号创建一个空元组
empty_tuple = ()
print(empty_tuple) # 输出 ()# 只有一个元素的元组可以通过在这个元素后面添加逗号来创建
single_tuple = 'single',
print(single_tuple) # 输出 ('single',)# 通过逗号隔开的方式创建多个元素的元组
multiple_tuple = 1,True,3.14,'hello tuple'
print(multiple_tuple) # 输出 (1, True, 3.14, 'hello tuple')# 通过一对圆括号进行创建
tuple_one = (1,2,'a',True)
print(tuple_one) # 输出 (1, 2, 'a', True)# 通过tuple()函数进行创建,实际上是将列表转换成元组
tuple_two = tuple([True,'hello tuple2',3.14])
print(tuple_two) # 输出 (True, 'hello tuple2', 3.14)

在这里插入图片描述

2.2访问元组元素

  元组也是有序序列,所以访问元组中的元素可以通过索引(Indexing)来实现,索引从0开始。可以使用正整数索引访问元素,也可以使用负整数索引从末尾开始访问元素。
  需要注意的是,尝试访问不存在的索引会引发IndexError。确保索引在元组的有效范围内。

example_tuple = (1, 2, 'hello', 3.14,[3,5,7,9])
print(example_tuple[1]) # 输出 2
print(example_tuple[4]) # 输出 [3, 5, 7, 9]
print(example_tuple[-2]) # 输出 3.14
print(example_tuple[0:2]) # 输出 1 2
# print(example_tuple[6]) 该项操作会引发IndexError:IndexError: tuple index out of range# 元组也适用于for循环遍历
for item in example_tuple:print(item)

在这里插入图片描述

2.3 元组的相关方法

  元组为不可变数据类型,相关的方法较少,主要是index() count(),以及内置函数len()

example_tuple = (1, 2, 'hello', 3.14, 'hello')# index(x): 返回元素 x 在元组中第一次出现的索引。
print(example_tuple.index(3.14)) # 输出 3# count(x): 统计元素 x 在元组中出现的次数。
print(example_tuple.count('hello')) # 输出2# len(x): 获取元组的长度
print(len(example_tuple)) # 输出5

2.4 元组的拼接和重复

  通过+*进行拼接和重复

# 元组的拼接
tuple_1 = (2,4,6)
tuple_2 = ('a','b','hello')
join_tuples = tuple_1 +tuple_2
print(join_tuples) # 输出 (2, 4, 6, 'a', 'b', 'hello')# 元组的重复
tuple_3 = ('hello','tuple')
repeat_tuples = tuple_3 * 3
print(repeat_tuples) # 输出 ('hello', 'tuple', 'hello', 'tuple', 'hello', 'tuple')

2.元组的打包和解包

  元组的打包(Packing)和解包(Unpacking)是两个常用的操作,它们允许你轻松地组合和分离多个变量。
  元组的打包:元组的打包是指将多个值组合成一个元组的过程。
  元组的解包:元组的解包是指将一个元组中的值解开,分配给多个变量。
  打包和解包的方式在函数返回多个值的时候特别有用。函数将多个值打包成元组返回,然后可以使用解包将这些值分配给不同的变量。
  需要注意的是,解包操作要求等号左边的变量数量必须与元组中的值数量相等。如果变量数量少于元组中的值数量,会触发 ValueError异常。

# 打包 packing 实际上就是元组默认创建的方式
# 在这里 True , 3.14 , hello被打包成一个元组
example_tuple = True,3.14,'hello'
print(example_tuple) # 输出 (True,3.14,'hello')# 解包 unpacking
# 元组example_tuple的值被解包并分配给变量 a,b,和 c
a, b, c = example_tuple
print(a) # 输出 True
print(b) # 输出 3.14
print(c) # 输出 hello
# 触发 ValueError 异常
# 解包错误示例
example_tuple = 1, 2, 3
a, b = example_tuple  # ValueError: too many values to unpack (expected 2)
# 打包解包应用
# 函数返回多个值的例子
def get_coordinates():x = 10y = 20z = 30return x, y, z
# 解包函数返回的元组
x_coord, y_coord, z_coord = get_coordinates()
print(x_coord)  # 输出: 10
print(y_coord)  # 输出: 20
print(z_coord)  # 输出: 30

3.元组的应用场景

  Python 元组具有不可变性、安全性、高效性等优点,因此在很多场景下都有广泛的应用:
  1)多个返回值: 元组在函数返回多个值时特别方便,通过打包返回值,调用方可以使用解包轻松获取多个返回值。
  2)字典键值: 元组的不可变性使其成为字典的理想键值,特别是在需要使用多个值来唯一标识某个项的情况下。
  3)线程安全的多线程编程: 元组的不可变性使其在多线程环境中更安全,因为不会发生数据竞争问题。
  4)数据库操作: 在数据库操作中,元组通常用于存储一组参数,例如查询条件或更新值,因为元组的不可变性可以确保这些参数在整个操作中保持一致。
  5)非可变集合: 当需要将一组数据作为集合元素,但又不希望这些数据可变时,元组是一个很好的选择。它们可以作为集合的元素,同时保持不可变性。
  6)按需计算: 元组可以用于存储需要按需计算的值,只有在需要时才进行计算,避免了不必要的计算开销。
在这里插入图片描述

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

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

相关文章

擎创动态 | 再获上海区政府肯定,擎创科技被评为年度优秀高新技术企业

11月6日,上海市静安区副区长张慧和市北高新集团总裁陈军一行来到擎创科技调研指导,由擎创科技高管张健和陈莹陪同交流。 陈莹女士首先向副区长一行详细介绍了擎创科技的发展现状、落地实践效益以及未来的规划布局。在公司的成长过程中,得到静…

力扣labuladong——一刷day27

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、力扣870. 优势洗牌 田忌赛马的升级版,nums1表示田忌的马,nums2表示齐王的马,nums2的下标表示出场顺序 前言 一、力扣870…

Windows 10 下使用Visual Studio 2017 编译CEF SDK

1.下载CEF SDK 由于需要跑在32位的机器,所以选择下载32位的SDKCEF Automated Builds 选择 Current Stable Build (Preferred) ,这是当前稳定版本,CEF版本118 下载成功解压 2.下载编译工具 CMake 下载地址:CMake 配置CMake指向…

python pip安装特定包,网络慢的问题

文件requirements.txt httpx0.24.0 Pillow9.5.0 playwright1.33.0 tenacity8.2.2 tornado6.3.2 PyExecJS1.5.1 opencv-python4.7.0.72 tortoise-orm[asyncmy]0.19.3 aerich0.7.2 numpy~1.24.4 redis~4.6.0 Pydantic1.7将文件放入任意一个目录下 cd 到该目录下执行 while read…

提升SDK广告填充率的有效方法

提升SDK广告填充率的有效方法 在移动应用开发中,提高SDK广告填充率是一个关键目标,因为它直接影响到广告收益。广告填充率是指广告请求中实际被填充广告的比例。提高填充率可以帮助开发者最大化广告收入,以下是一些有效的方法来实现这一目标。…

Containerd接入Harbor仓库

在使用容器时,避免不了会使用到私有仓库,一般都是采用 harbor 作为私有仓库,docker 对接 harbor 仓库非常简单,哪 containerd 如何对接 harbor 呢? 在内网使用 harbor 根据个人习惯,一般都是非 http 并且是…

PHP 服装销售管理系统mysql数据库web结构layUI布局apache计算机软件工程网页wamp

一、源码特点 PHP 服装销售管理系统是一套完善的web设计系统mysql数据库 ,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 php服装销售管理系统1 二、功能介绍 (1)员工管理:对员工信息…

卷积神经网络中参数量的计算原理及方法

手动计算参数量: 1. 卷积层参数计算方法: 参数量计算公式 卷积核高度 * 卷积核宽度 * 输入层通道数 * 输出层通道数 bias(输出层通道数) 注意:池化层没有参数(只是在已知数据区域里求个最大值)输入层通道数就是上层的卷积核数量 输出层通道数等于卷积核个数:输入层通道数经过…

设计模式 -- 责任链模式(Chain of Responsibility Pattern)

责任链模式:和上一篇策略模式一样也是行为型模式。创建一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它…

jenkins CSV编码导致乱码问题解决

问题:生产报告会乱码的问题,一般是有编码格式引起的。我遇到的问题是,jmeter需要读取csv的数据作为参数。但是我们并不知道csv保存是什么编码格式,有可能不是utf-8的编码格式,所以会导致中文乱码的问题 解决方案&#…

每日一练:Python中如何使用enumerate 函数创建带索引的元组

enumerate函数是 Python 中用于遍历可迭代对象并返回索引和对应元素的内置函数。它可以方便地用于创建带索引的元组。以下是一个使用enumerate 函数创建带索引的元组的示例: # 创建一个列表 fruits [apple, banana, orange, grape]# 使用 enumerate 函数创建带索引…

Python(Numpy)实现非极大值抑制

1.Numpy的几个骚操作 (1).np.maximum的使用 import numpy as np box [3,5,7,9] # A single box with a first coordinate of 3 boxes np.array([[1, 4], [5, 2], [2, 6]]) # An array of multiple boxes #把box把3拿出来和boxes的第一列,逐个比较,…

机器学习中的假设检验

正态性检验相关分析回归分析 所谓假设检验,其实就是根据原假设来构造一种已知分布的统计量来计算概率,根据概率值大小来判断能否拒绝原假设,从而得到一种结论。假设检验的过程就是,构造一个原假设成立条件下的事件A,计…

使用Nodejs搭建简单的web网页并实现公网访问

🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《Linux》《Cpolar》 ❤️感谢大家点赞👍收藏⭐评论✍️ 使用Nodejs搭建简单的web网页并实现公网访问 前言 Node.js是建立在谷歌Chrome的JavaScript引擎…

HarmonyOS应用开发-首选项与后台通知管理

首选项 在移动互联网蓬勃发展的今天,移动应用给我们生活带来了极大的便利,这些便利的本质在于数据的互联互通。因此在应用的开发中数据存储占据了非常重要的位置,HarmonyOS应用开发也不例外。本章以HarmonyOS的首选项为例,介绍了…

SpringBoot 是否必传参数之分组校验(2)

文章目录 前言背景分组接口分组校验Controller层请求示例前言 本文基于SpringBoot 3.1.2,使用分组校验来优雅的处理参数是否必传校验。 背景 在做Crud时,尤其是修改操作,某个参数在规定不能修改,如果没有做是否必传校验,就会导致前端无论传什么,后端就会直接进行修改操…

Python:Unittest框架快速入门:用例、断言、夹具、套件、HTML报告、ddt数据驱动

快速看了套Unittest的入门教程 软件测试全套资料赠送_哔哩哔哩_bilibili软件测试全套资料赠送是快速入门unittest测试框架!全实战详细教学,仅此一套!的第1集视频,该合集共计11集,视频收藏或关注UP主,及时了…

本周Github有趣开源项目:Rspress等6个

Github有趣的项目、工具和库: 1、sshx 一个基于 Web 的安全协作终端。通过网络进行快速、协作的实时终端共享 特征: 运行一个命令即可与任何人共享您的终端。 在无限画布上调整大小、移动窗口以及自由缩放和平移。 查看其他人的光标实时移动。 连接到…

copilot 产生 python工具函数并生成单元测试

stock.py 这个文件,我只写了注释(的开头),大部分注释内容和函数都是copilot # split a string and extract the environment variable from it # input can be , pathabc, pathabc;pathdef, pathabc;pathdef;pathghi # output i…

如何结合内网穿透实现公网远程访问Linux AMH服务器管理面板

文章目录 1. Linux 安装AMH 面板2. 本地访问AMH 面板3. Linux安装Cpolar4. 配置AMH面板公网地址5. 远程访问AMH面板6. 固定AMH面板公网地址 AMH 是一款基于 Linux 系统的服务器管理面板,它提供了一系列的功能,包括网站管理、FTP 管理、数据库管理、DNS 管…