10.1 元组及其特性
元组是 Python 中四个内建集合类型之一。
如你所知,Python 有几个内建数据类型,可以存储一组对象。它们是 list
— 列表,tuple
— 元组,set
— 集合,dictionary
— 字典。今天我们来看第二个,也是最简单的之一 — 元组。
元组 (tuple)
可以存储多个元素。每个元素都有自己的顺序号,这使得元组是有序的 — ordered。这点上它和列表很像。
元组是不可变的 — 一旦创建就不能更改,这使得它非常适合存储不应在程序中更改的数据。因此它的第二个特性是不可变性 (immutable)。
至于重复项 — 元组中可以多次存储相同的元素 — allow duplicates。再一次,和列表很像。
有用。可以把元组想象成一个不可变的列表,只不过它使用的是圆括号 ()
而不是方括号 []
。
10.2 创建元组
元组是不可变的元素序列,可以通过不同方式创建。以下是最常见的方法:
直接声明:
元组可以通过圆括号 () 和逗号来分隔元素直接创建。
tuple1 = (1, 2, 3)
tuple2 = ("apple", "banana", "cherry", "apple", "cherry")
tuple3 = (1, "apple", True)
无括号:
Python 允许不使用括号创建元组,只需用逗号分隔元素即可。
tuple1 = 1, 2, 3
tuple2 = "apple", "banana", "cherry", "apple", "cherry"
tuple3 = 1, "apple", True
单个元素的元组:
创建单个元素的元组时,必须在该元素后加逗号
。
tuple1 = (1,)
tuple2 = ("apple",)
tuple3 = (True,)
使用 tuple()
:
函数 tuple()
将可迭代对象转换为元组。这可以是列表、字符串或任何其他可迭代对象。
list_to_tuple = tuple([1, 2, 3])
10.3 元组元素的拆包
和元组一起工作时,可以将多个元素打包进一个元组,也可以将元组拆包成多个变量,这使得代码更简洁:
基础拆包
将元组拆包进变量的例子:
my_tuple = (1, 2, 3)
x, y, z = my_tuple
这里变量 x
、y
和 z
分别得到值 1
、2
和 3
。
扩展拆包
Python 也支持扩展拆包,允许将元组的一部分提取到列表中,使用符号 *:
a, *b, c = (1, 2, 3, 4, 5) # a = 1, b = [2, 3, 4], c = 5
在此例中,a
和 c
得到第一个和最后一个值,而 b
变成包含所有其他值的列表。
在函数中的应用
元组拆包常用于传递参数给函数。这在函数接收可变数量参数时尤其有用,或者当参数预先被打包在元组或列表中:
def func(a, b, c):
print(a, b, c)
values = (1, 2, 3)
func(*values)
使用注意事项
元组的拆包要求元组元素的数量与变量的数量精确匹配,否则会产生错误。然而,使用 *
来收集余下的元素可以避免这个错误,使得代码对数据的变化更灵活。
10.4 方法列表
元组是不可变对象,因此它们几乎没有自己的方法。只有两个 😊
函数 count(x)
:
返回 x
在元组中出现的次数。对于统计某些元素数量很有用。
t = (1, 2, 3, 2, 4, 2)
print(t.count(2)) # 输出 3
函数 index(x)
:
返回元素 x
在元组中的第一次出现的索引。如果未找到元素,会引发异常 ValueError
。
t = (1, 2, 3, 2, 4, 2)
print(t.index(3)) # 输出 2
虽然这是类 tuple 的所有方法,但这并不意味着无法对其进行处理。可以,只是会稍微复杂一些。
GO TO FULL VERSION