Python 元组tuple详解(超详细)

2023-10-27

Python内置函数/方法详解—元组tuple

元组是有序不可更改的集合。在Python中,元组使用圆括号 () 编写的。

1、创建元组

元组的创建很简单,使用圆括号 () 直接创建或者使用 tuple() 函数创建,只需要在圆括号中添加元素,并使用逗号隔开即可。

1.1 使用 () 创建元组

通过 () 创建元组后,使用 = 将它赋值给变量,格式如下:

tuple_name = (element_1, element_2, ..., element_n)

其中,tuple_name 表示变量名,element_1 ~ element_n 表示元组内的元素。

1.2 使用 tuple()函数 创建元组

我们除了可以使用 () 创建元组,还可以使用 tuple() 函数创建元组,但 tuple() 偏向于将某个类型转换为元组,具体用法见下述:

cre_tuple = tuple(('a', 'b', 'c'))  # 注意双括号
print(cre_tuple)
print(type(cre_tuple))
('a', 'b', 'c')
<class 'tuple'>

1.3 元组(单个元素)

当元组中只包含一个元素时,需要在元素后面添加逗号, ,否则括号会被当作运算符使用:

tuple_1 = (20)
print(type(tuple_1))  # <class 'int'>

tuple_2 = (20,)
print(type(tuple_2))  # <class 'tuple'>

当元组中只含一个元素未添加逗号时,使用 type() 打印其类型时,会输出 <class 'int'>

当元组中只含一个元素并添加逗号时,使用type() 打印其类型时,会输出 <class 'tuple'>

1.4 元组 VS 列表

  • 在Python中,元组与列表相似,不同之处在于元组的元素不能修改,而列表的元素可以修改
  • 元组使用 小括号(),列表使用 中括号[]

2、访问元组

和列表一样,我们既可以使用下标索引访问元组中的某个元素(得到一个元素的值),也可以使用切片访问元组中的一组元素(得到是子元组)。

2.1 下标索引访问

下标索引访问元组分为两大类,即正向索引反向索引,格式为 tuple_name[i] ,其中,tuple_name 表示元组名,i表示索引值,i可以是正数(正向索引)也可以是负数(反向索引)。

可以得知,tuple_name[0]表示元组内第一个元素tuple_name[-1]则表示元组内最后一个元素

tuple_name = ('wzq', 'lgl', 'gz', 'whl', 'sj', 'hxw')
print(tuple_name[0])
print(tuple_name[-1])
wzq
hxw

正向索引:从第一个(下标0)开始、第二个(下标1)…

反向索引:从倒数第一个(下标-1)、倒数第二个(下标-2)…

2.2 切片访问

如若对上方描述不太理解,可参考下表:

元组值 wzq lgl gz whl sj hxw
正向索引 0 1 2 3 4 5
反向索引 -6 -5 -4 -3 -2 -1

使用切片访问元组的格式为 tuple_name[strat : end : step] ,其中,start 表示起始索引,end 表示结束索引,step 表示步长。

tuple_name = ('wzq', 'lgl', 'gz', 'whl', 'sj', 'hxw')
print(tuple_name[1:5:2])
print(tuple_name[-6:-1:3])
('lgl', 'whl')
('wzq', 'whl')

在使用切片访问元组元素时,tuple_name[strat : end : step],[start:end] 是左闭右开区间,即访问不了 end 代表的元素。

2.3 for 循环遍历元组

可以使用 for 循环遍历元组中的项目:

fruit_tuple = ('apple', 'pear', 'cherry')
for i in fruit_tuple:
    print(i)
apple
pear
cherry

2.4 检查项目是否存在

要确定元组中是否存在指定的项,我们可以使用 in 关键字:

# 检查元组中是否存在'apple'
fruit_tuple = ('apple', 'pear', 'cherry')
print('apple' in fruit_tuple)
True

使用 in 关键字检查元组中是否存在指定项时,如果存在,则返回 True ;反之,则返回 False

2.5 更改元组值

创建元组后,我们将无法更改其值。元组是不可变的,或者也被称为恒定的。

但是有一种解决方法:可以先将元组转换为列表,更改列表值,然后再将其转换回元组

fruit_tuple = ('apple', 'pear', 'cherry')
fruit_list = list(fruit_tuple)
fruit_list[2] = 'banana'
fruit_tuple = tuple(fruit_list)
print(fruit_tuple)
('apple', 'pear', 'banana')

2.6 元组连接(合并)/复制

与字符串一样,元组之间可以使用 + 号和 * 号实现元组的连接复制,这就意味着它们可以生成一个新的元组。

1、+连接

x = (1, 2, 3)
y = (4, 5, 6)
print(x + y)
(1, 2, 3, 4, 5, 6)

2、*复制

x = ('Hello',)
print(x * 5)
('Hello', 'Hello', 'Hello', 'Hello', 'Hello')

2.7 元组不可变性

所谓元组的不可变性指的是元组所指向的内存中的内容不可变。

tup = ('A', 'B', 'C')
# tup[0] = 'a'

不支持修改元素,会报错 TypeError: 'tuple' object does not support item assignment

tup = ('A', 'B', 'C')
print(id(tup))
# 查看内存地址
tup = (1, 2, 3)
print(id(tup))
2671405067264
2671405072256

从以上实例可以看出,重新赋值的元组 tup ,绑定到了新的对象了,不是修改了原来的对象。

3、内置函数

3.1 打印输出 print()

1、print()函数

print() 函数的功能我们已经非常熟悉了,就是打印输出。

my_tuple = ('name', True, 21)
print(my_tuple)
('name', True, 21)

3.2 确定元组项目 len()

2、len()函数

当我们要确定一个元组有多少项目(元素)时,可以使用len()函数。

fruit_tuple = ('apple', 'banana', 'cherry')
print(len(fruit_tuple))
3

3.3 返回变量类型 type()

3、type()函数

使用 type() 函数可以确定变量是什么类型(字符串、列表、元组、字典或集合)。

当对tup_1 = (20)使用 type() 确定变量类型时,会返回<class 'int'>,表明这是一个整型。所以当一个元组只含有一个元素时,一定要加上逗号,

当对tup_1 = (20,)使用 type() 确定变量类型时,会返回<class 'tuple'>,表明这是一个元组

3.4 转换为元组 tuple()

4、tuple()函数

tuple() 函数的功能是,将其他类型转换为元组类型,详细用法如下:

  • 将字符串转换为元组
str1 = 'Hello Python'
print(tuple(str1))
('H', 'e', 'l', 'l', 'o', ' ', 'P', 'y', 't', 'h', 'o', 'n')
  • 将列表转换为元组
list1 = ['Hello', 'Python']
print(tuple(list1))
('Hello', 'Python')
  • 将字典转换为元组
dict1 = {'Hello': 'Python', 'name': 'pink'}
print(tuple(dict1))
('Hello', 'name')
  • 将集合转换为元组
set1 = {'Hello', 'Python', 'name', 'pink'}
print(tuple(set1))
('Hello', 'name', 'Python', 'pink')
  • 将区间转换为元组
range1 = range(1, 6)
print(tuple(range1))
(1, 2, 3, 4, 5)

3.5 元组元素最大/小值 max()、min()

5、max()函数和min()函数

max() 函数的作用是返回元组中元素最大值min() 函数的作用是返回元组中元素最小值

tup1 = (4, 6, 2, 0, -5)
print(max(tup1))
print(min(tup1))

tup2 = ('a', 'z', 'A', 'Z')
print(max(tup2))
print(min(tup2))
6
-5
z
A

3.6 删除元组 del

元组中的元素值是不允许删除的,但我们可以使用 del 函数来删除整个元组。

word_tuple = ('a', 'b', 'c')
del word_tuple

当我们使用 del 函数删除某元组后,再使用 print() 函数打印输出时,会报错NameError: name 'word_tuple' is not defined,表明该元组未被定义。

4、内置方法

4.1 元素出现次数 count()

count() 方法返回指定值在元组中出现的次数。

语法

tuple.count(value)

参数值

参数 秒速
value 必需。要检索的项目。

实例

返回值 5 在元组中出现的次数:

num_tuple = (1, 3, 7, 8, 7, 5, 4, 6, 8, 5, 5)
print(num_tuple.count(5))
3

4.2 元素位置 index()

index() 方法查找指定值的第一次出现。

语法

tuple.index(value)

参数值

参数 描述
value 必需。要检索的项目。

实例

num_tuple = (1, 3, 7, 8, 7, 5, 4, 6, 8, 5, 5)
print(num_tuple.index(5))
5

注意:当被搜索值在元组中存在多个,则返回第一次出现的下标。

num_tuple = (1, 3, 7, 8, 7, 5, 4, 6, 8, 5, 5)
print(num_tuple.index(999))

如果未找到该值,index() 方法将引发异常,ValueError: tuple.index(x): x not in tuple

5、总结

函数 描述
print() 打印输出
len() 确定元组项目
type() 返回变量类型
tuple() 转换为元组
max() 返回元组元素最大值
min() 返回元组元素最小值
del 删除元组
方法 描述
count() 返回元组中指定值出现的次数
index() 在元组中搜索指定的值并返回它被找到的位置

以上就是本文的全部内容啦!如果对您有帮助,麻烦点赞啦!收藏啦!欢迎各位评论区留言!!!

最后编辑于:2022/7/25 20:43

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 元组tuple详解(超详细) 的相关文章

  • 散景图只会弹出一个空白窗口

    所以我最近一直在尝试学习散景 一切都很顺利 但突然间 每当我尝试制作散景图时 浏览器就会显示一个空白页面 我没有收到任何错误代码 只有空白页 这是我几天前成功用来创建绘图的程序 我什至尝试加载几周前制作的 html 绘图文件 该文件在同事计
  • 在二维数组中进行所有可能的组合

    我正在尝试制作具有所有可能组合的 4x4 16 像素黑白图像数组 我制作了以下数组作为模板 template 0 0 0 0 start with all white pixels 0 0 0 0 0 0 0 0 0 0 0 0 然后我想迭
  • 创建 xyz 海拔数据的曲面图

    我正在尝试用 python 创建一座山的表面图 其中我有一些 xyz 数据 最终结果应该类似于that https i stack imgur com rKQV0 png 该文件的格式如下 616000 0 90500 0 3096 712
  • Discord.py 斜线命令在 cogs 中不起作用

    我正在构建一个不和谐的机器人 并且想要在 cogs 内使用斜杠命令 但这些命令不显示或工作 这是代码 cog guild ids 858573429787066368 861507832934563851 class Slash comma
  • 将列表值转换为 pandas 中的行

    我有数据帧 其中一列具有相同长度的 numpy ndarray 值 df list 0 Out 92 array 0 0 0 0 29273096 0 30691767 0 27531403 我想将这些列表值转换为数据框并从 df iloc
  • Asyncio:从未检索到任务异常的怪异

    假设我有一个简单的代码 import asyncio async def exc print 1 0 loop asyncio get event loop loop create task exc try loop run forever
  • cxfreeze virtualenv 中缺少 distutils 模块

    从 python3 2 项目运行 cxfreeze 二进制文件时 我收到以下运行时错误 project dist project distutils init py 13 UserWarning The virtualenv distuti
  • 使用 python 从 CSV 创建字典

    我有一个 CSV 格式的文件 其中 A B 和 C 是标题 我如何以Python方式将此CSV转换为以下形式的字典 A 1 B 4 C 7 A 2 B 5 C 8 A 3 B 6 C 9 到目前为止我正在尝试以下代码 import csv
  • 机器学习的周期性数据(例如度角 -> 179 与 -179 相差 2)

    我使用 Python 进行核密度估计 并使用高斯混合模型对多维数据样本的可能性进行排名 每一条数据都是一个角度 我不确定如何处理机器学习的角度数据的周期性 首先 我通过添加 360 来删除所有负角 因此所有负角都变成了正角 179 变成了
  • 使用具有可变数量索引的 numpy mggrid

    如何将 numpy mgrid 与可变数量的索引一起使用 我在 github 上找不到任何人将其与硬编码值以外的任何内容一起使用的示例 import numpy as np np mgrid 1 10 1 10 this works fin
  • Django 1.7:如何使用 html/css 文件作为模板发送电子邮件

    从 Django 1 7 开始 可以send email 使用新参数 html message 不幸的是 没有关于如何使用它的全面指南 新手友好 或者至少我找不到它 我需要使发送的电子邮件变得漂亮 因此 我试图弄清楚如何将我的消息包含到 h
  • 增强迪基-富勒测试中的 BIC 在 Python 中到底是如何工作的?

    这个问题是关于 statsmodels tsa stattools python 库 adfuller 中的增强迪基 富勒测试实现 原则上 AIC 和 BIC 应该计算一组可用模型的信息标准 并选择最好的模型 信息损失最低的模型 但它们在增
  • Python GTK3 Treeview 向上或向下移动选择

    如何在树视图中向上或向下移动所选内容 我的想法是 我可以使用向上和向下按钮将选择向上移动一行或向下移动一行 我的 Treeview 使用 ListStore 不确定这是否重要 首先 我将使用我熟悉的 C 代码 如果您在将其翻译为 Pytho
  • 在Python中随机交错2个数组

    假设我有两个数组 a 1 2 3 4 b 5 6 7 8 9 我想将这两个数组交错为变量 c 注意 a 和 b 不一定具有相同的长度 但我不希望它们以确定性的方式交错 简而言之 仅仅压缩这两个数组是不够的 我不想要 c 1 5 2 6 3
  • 如何在类型提示中定义元组或列表的大小

    有没有办法在参数的类型提示中定义元组或列表的大小 目前我正在使用这样的东西 from typing import List Optional Tuple def function name self list1 List Class1 if
  • python 中的 F 字符串前缀给出语法错误[重复]

    这个问题在这里已经有答案了 我有一个名为 method 的变量 它的值是 POST 但是当我尝试运行时print f method method is used 它不断在最后一个双引号处给出语法错误 我找不到它这样做的原因 我正在使用 py
  • 本地主机上的 Google App Engine GQL 查询

    我正在 Google App Engine Windows 上的 SDK 版本 1 7 0 上开发一个应用程序 我需要经常测试该应用程序 并且此测试涉及数据存储上的大量 GQL 查询 您可以在 App Engine 管理界面的浏览器中在线运
  • 将二进制数据视为文件对象?

    在此代码片段 由另一个人编写 中 self archive是一个大文件的路径并且raw file是以二进制数据形式读取的文件内容 with open self archive rb as f f seek offset raw file s
  • 带 Qt 的菜单栏/系统托盘应用程序

    我是 Qt PyQt 的新手 我正在尝试制作一个应用程序 其功能将从菜单栏 系统托盘执行 这里展示了一个完美的例子 我找不到关于如何做到这一点的好资源 有人可以建议吗 Thanks 我认为您正在寻找与QMenu and QMainWindo
  • 关闭正在运行代码的 IPython Notebook

    怎么运行的 我在 IPython Notebook 中运行了一些代码 一些迭代工作 我不小心关闭了正在运行的笔记本的浏览器 但回到 IPython 仪表板 我发现这个特定的笔记本尚未关闭 所以如果我再次打开笔记本 我会在它正在执行的代码前面

随机推荐

  • 记第一次拆机

    两周前的周日 也不知道抽了什么风萌生了拆笔记本电脑的想法 可能是由于从购买之后风扇都没清理过的原因吧 笔记本电脑品牌联想 型号G480 2013年大一暑假购置的机子 也就是普通的上网本吧 玩游戏确实有点卡 比如剑灵 好了 言归正传 下面开始
  • 卡西欧计算机的闹铃怎么取消,卡西欧g-shock怎么关闹钟

    卡西欧g shock怎么关闹钟 连续按mode按键 通常是左下角按键 直至液晶屏幕出现al1 al2 al3等等字样 然后 第二显示屏会显示 on 按 adjust 就可以改为 of 就关闭了 卡西欧g shock闹钟怎么设置 1 按MOD
  • 一文搞定Postman(菜鸟必看)

    什么是Postman Postman是一个可扩展的 API 测试工具 可以快速集成到 CI CD 管道中 它于 2012 年作为 Abhinav Asthana 的一个副项目启动 旨在简化测试和开发中的 API 工作流程 API 代表应用程
  • java高并发多线程架构_java架构师指南 高并发和多线程的区别

    高并发和多线程 总是被一起提起 给人感觉两者好像相等 那它们之间究竟有什么区别呢 1 多线程 多线程是java的特性 也是java架构师必须掌握的一项技术 因为现在cpu都是多核多线程的 可以同时执行多个任务 为了提高JVM的执行效率 Ja
  • 搭建Obsidian+picGo+Lsky Pro图床

    搭建Obsidian picGo Lsky Pro图床 0 前言 去年心血来潮买了个小主机 搭建了家庭服务器 安装了PVE系统 散热拉胯 性能不足目前只创建了个黑群晖系统 搭建一个图床 方便日常笔记工作 1 软件 1 1 Obsidian
  • 浅谈App的性能优化

    浅谈App的性能优化 2018 01 02 说到 Android 系统手机 大部分人的印象是用了一段时间就变得有点卡顿 有些程序在运行期间莫名其妙的出现崩溃 打开系统文件夹一看 发现多了很多文件 然后用手机管家 APP 不断地进行清理优化
  • Git第十讲 Git如何正确使用log快速查找内容/提交

    在Git中 你可以使用不同的命令来快速查找指定内容或指定提交 下面我将介绍两种常用的方法 快速查找指定内容 要快速查找包含特定内容的文件或代码行 可以使用 git grep 命令 它类似于常见的 grep 命令 但是专门用于搜索Git仓库中
  • 以太坊交易确认数如何获取

    以太坊和比特币一样 都有一个最长链的概念 因此也有一个交易确认数的概念 当一个以太坊交易所在区块被新加入区块链时 该交易的确认数为1 之后每增加一个区块 该交易的确认数加1 显然 一个以太坊交易的确认数越多 就意味着该交易在区块链中埋的越深
  • html css js实现抽奖,原生(纯)js+html+css实现移动端抽奖转盘系统

    这是我前个月使用纯javascript html写出的一个抽奖转盘系统 按理来说 我应该在当时做完这个小系统 就应该立即写bike总结才对 但是本人之前没有在网上写博客的习惯 平时总结更加习惯写在纸上 但是现在发现卸载网上可能更好 博客中有
  • 【第26篇】Swin Transformer

    文章目录 摘要 1 简介 2 相关工作 3 方法 3 1 整体架构 3 2 基于移动窗口的自注意力 3 3 架构变体 4 实验 4 1 ImageNet 1K 上的图像分类 4 2 COCO 上的物体检测 4 3 ADE20K 上的语义分割
  • 2. ZK客户端与服务端建立连接的过程(基于NIO)

    ZK客户端与服务端建立连接的过程 引例 1 启动SendThread 2 状态初始化 3 开始连接 4 处理服务端连接响应 5 流程图 在上一篇 客户端启动源码分析 文章中讲到了客户端会使用两个线程 SendThread和EventThre
  • C#知识系列:nameof 运算符

    插眼 总结 获取变量名 避免因为变量名而声明字符串 参考 官方文档 https docs microsoft com zh cn dotnet csharp language reference operators nameof 其他参考
  • Qt 信号与槽 传输自定义结构体跨线程访问程序异常退出问题

    Qt 信号与槽 传输自定义结构体跨线程访问程序异常退出问题 在使用自定义结构体的时候发现在同一个线程里面的信号发送和槽函数访问使用是正常的 当跨线程信号与槽连接访问自定义结构体时发生访问异常程序异常退出 通过尝试找到问题 解决办法如下 自定
  • 基于STM32f103c8t6的测温枪设计过程

    体温枪设计 设计流程 一 开发板和模块的介绍 1 STM32F103C8T6开发板 2 MLX90614测温模块 3 TM1650红外数码管 二 硬件连接 1 STM32F103C8T6引脚图 2 MLX90614测温模块连接原理图 3 T
  • 实训报告:C&C++ 结构实训 - 深入学习与实践

    实训报告 C C 结构实训 深入学习与实践 引言 C和C 是广泛应用于软件开发领域的编程语言 它们为开发人员提供了强大的工具和灵活性 本篇文章将围绕 C C 结构实训展开 深入学习并实践其中的关键概念与技术 一 简介 C C 结构实训是一项
  • Spark内存管理

    概述 spark从1 6 0开始内存管理发生了变化 原来的内存管理由StaticMemoryManager实现 现在被称为Legacy 在1 5 x和1 6 0中运行相同代码的行为是不同的 为了兼容Legacy 可以通过spark memo
  • python综合案例

    综合案例 1 需求分析 2048游戏是一款数字益智游戏 如图所示 具体游戏规则如下 玩家每次可以选择上下左右其中一个方向移动 每移动一次 所有数字方块都会往移动的方向靠拢 相同数字方块在靠拢时会相加 每次移动完成后 系统会在空白的方块中随机
  • QSS的使用

    QSS官方文档 https doc qt io qt 5 stylesheet reference html 图标制作例子 normal hover press disable 图标制作 按钮设计指南 按钮多态的几种方法 一 程序应用qss
  • 微信小游戏入门案例——拼图游戏

    微信小游戏入门案例 拼图游戏 涉及内容 canvas组件 小程序界面绘图API 目录结构 pages game game js pages game game js 方块的初始位置 var num 00 01 02 10 11 12 20
  • Python 元组tuple详解(超详细)

    文章目录 Python内置函数 方法详解 元组tuple 1 创建元组 1 1 使用 创建元组 1 2 使用 tuple 函数 创建元组 1 3 元组 单个元素 1 4 元组 VS 列表 2 访问元组 2 1 下标索引访问 2 2 切片访问