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

1.介绍和基础操作

Python中的元组(Tuple)是不可变有序序列,可以容纳任意数据类型(包括数字、字符串、布尔型、列表、字典等)的元素,通常用圆括号() 包裹。与列表(List)类似,元组可以通过索引(Index)访问其元素,也可以使用切片(Slice)截取部分元素。但是,元组一旦创建,就无法修改其中的元素。

输出时,元组都要由圆括号标注,这样才能正确地解释嵌套元组。输入时,圆括号可有可无,不过经常是必须的(如果元组是更大的表达式的一部分)。不允许为元组中的单个元素赋值,当然,可以创建含列表等可变对象的元组。

1.1 创建元组

python 复制代码
# 使用一对空圆括号创建一个空元组
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。确保索引在元组的有效范围内。

python 复制代码
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()

python 复制代码
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 元组的拼接和重复

通过+*进行拼接和重复

python 复制代码
# 元组的拼接
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异常。

python 复制代码
# 打包 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
python 复制代码
# 触发 ValueError 异常
# 解包错误示例
example_tuple = 1, 2, 3
a, b = example_tuple  # ValueError: too many values to unpack (expected 2)
python 复制代码
# 打包解包应用
# 函数返回多个值的例子
def get_coordinates():
    x = 10
    y = 20
    z = 30
    return 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)按需计算: 元组可以用于存储需要按需计算的值,只有在需要时才进行计算,避免了不必要的计算开销。

相关推荐
z千鑫4 分钟前
【人工智能】深入理解PyTorch:从0开始完整教程!全文注解
人工智能·pytorch·python·gpt·深度学习·ai编程
尘浮生27 分钟前
Java项目实战II基于微信小程序的校运会管理系统(开发文档+数据库+源码)
java·开发语言·数据库·微信小程序·小程序·maven·intellij-idea
MessiGo27 分钟前
Python 爬虫 (1)基础 | 基础操作
开发语言·python
偶尔。53528 分钟前
什么是事务?事务有哪些特性?
数据库·oracle
安迁岚30 分钟前
【SQL Server】华中农业大学空间数据库实验报告 实验六 视图
数据库·sql·mysql·oracle·实验报告
xoxo-Rachel39 分钟前
(超级详细!!!)解决“com.mysql.jdbc.Driver is deprecated”警告:详解与优化
java·数据库·mysql
肥猪猪爸1 小时前
使用卡尔曼滤波器估计pybullet中的机器人位置
数据结构·人工智能·python·算法·机器人·卡尔曼滤波·pybullet
linux_carlos1 小时前
环形缓冲区
数据结构
readmancynn1 小时前
二分基本实现
数据结构·算法
Bucai_不才1 小时前
【数据结构】树——链式存储二叉树的基础
数据结构·二叉树