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)按需计算: 元组可以用于存储需要按需计算的值,只有在需要时才进行计算,避免了不必要的计算开销。

相关推荐
JUNAI_Strive_ving3 分钟前
番茄小说逆向爬取
javascript·python
一休哥助手4 分钟前
Redis 五种数据类型及底层数据结构详解
数据结构·数据库·redis
彤银浦4 分钟前
python学习记录7
python·学习
苏宸啊10 分钟前
顺序表及其代码实现
数据结构·算法
翔云12345612 分钟前
MVCC(多版本并发控制)
数据库·mysql
lin zaixi()14 分钟前
贪心思想之——最大子段和问题
数据结构·算法
夜雨翦春韭20 分钟前
【代码随想录Day30】贪心算法Part04
java·数据结构·算法·leetcode·贪心算法
简单.is.good25 分钟前
【测试】接口测试与接口自动化
开发语言·python
代码敲上天.29 分钟前
数据库语句优化
android·数据库·adb
一直学习永不止步32 分钟前
LeetCode题练习与总结:H 指数--274
java·数据结构·算法·leetcode·数组·排序·计数排序