专栏地址:最强 Python3 基础
公众号:Python 生产力
前言
元组(tuple)和列表很相似,也是 Python 集合数据类型中的一员。
元组由小括号和逗号组成 t = (1, 2, 3),和列表不一样的是,列表是可变的(mutable),而元组是不可变的(immutable)。不可变类型即是具有固定值的对象,如果想要修改存储的值,则需要创建另一个对象。从这边我们可以看出,对元组的修改和删除其实是不允许的,只允许创建新的对象来接收新的值,这样其实是对系统开销比较大,所以一般来说元组用来存放不需要经常改变的元素。
以下是元组的几个例子。这两个例子中可以看到,元组其实可以是不用写圆括号的,两个都属于元组,但是为了平常使用的时候能好区分,尽量把这个圆括号加上去。
tuple1 = 123, 456, 'Python'
tuple2 = (789, 123, 'Java')
下面例子中展示了如果要构建一个元素的元组,则必须在最后加上逗号,否则解释器不会把这个解释成元组。我们用 type() 方法来输出一下两个变量的类型,可以发现加了逗号的才是 tuple 类型,而不加逗号的会解释成其他类型。
tuple3 = (123, )
tuple4 = (123)
print(type(tuple3))
print(type(tuple4))
# 输出:
<class 'tuple'>
<class 'int'>
一、元组的操作
1. 查询
元组可以像列表一样,通过下标索引来访问其中的元素。
tuple1 = ('Python', 'Java', 'C++', 'Go', 'Ruby')
print(tuple1[2])
print(tuple1[-1])
# 输出:
C++
Ruby
2. 截取
元组的截取和列表的截取是相同的,也可以使用反向索引来截取。
tuple1 = ('Python', 'Java', 'C++', 'Go', 'Ruby')
print(tuple1[0:2])
print(tuple1[-3:-1])
# 输出:
('Python', 'Java')
('C++', 'Go')
3. 更新
元组因为是不可变对象,所以对其中的元素进行添加和删除都是不可以的。虽然不可以修改,但是不同的元组可以通过 “+” 操作符进行拼接,这个时候相当于合成了一个新的元组。我们可以通过打印三个元组的地址来看到,新合成的元组不是之前任何一个旧元组的地址。
tuple1 = ('Python', 'Java', 'C++')
tuple2 = ('Go', 'Ruby')
tuple3 = tuple1 + tuple2
print(tuple3)
print('tuple1 地址:', id(tuple1))
print('tuple2 地址:', id(tuple2))
print('tuple3 地址:', id(tuple3))
# 输出:
('Python', 'Java', 'C++', 'Go', 'Ruby')
tuple1 地址: 2208858740544
tuple2 地址: 2208858653824
tuple3 地址: 2208858744608
如果想要得到能更新元素的元组,可以用多个列表组成一个元组,因为列表是可变类型的,所以可以更新其中的元素,这时候相当于间接修改元组中的内容了。
tuple1 = ([1, 2, 3], [4, 5, 6])
aList = tuple1[0]
aList.append(7)
print(tuple1)
# 输出:
([1, 2, 3, 7], [4, 5, 6])
4. 删除
元组是不能删除其中某一个元素,但是可以使用 del 删除整个元组,或者对元组的引用重新赋值空元组对象。
tuple1 = ([1, 2, 3], [4, 5, 6])
del tuple1[0]
# 输出:
TypeError: 'tuple1' object doesn't support item deletion
tuple1 = ([1, 2, 3], [4, 5, 6])
del tuple1
# 输出:
NameError: name 'tuple1' is not defined
tuple2 = ('Python', 'Java')
tuple2 = ()
# 输出:
()
5. 元组运算
元组运算和列表相似,但是元组主要是用对象的拼接并生成新的元组。
tu1 = (1, 2, 3)
tu2 = (4, 5, 6)
print(tu1 + tu2)
print(tu1 * 5)
# 输出:
(1, 2, 3, 4, 5, 6)
(1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3)
二、内置函数
元组因为是不可变的,所以内置函数不存在添加或更新等操作函数了。
tuple1 = ('Python', 'Java', 'C++', 'Go', 'Ruby')
函数名称 | 形式 | 描述 | 举例 | 结果 |
---|---|---|---|---|
index | tuple1.index(x[, start[, end]]) | 查找列表中 obj 第一个匹配到的索引值 | tuple1.index(’Python‘) | 0 |
count | tuple1.count(obj) | 计算 obj 对象在列表中出现的次数 | tuple1.count(’Java‘) | 1 |
总结
元组的内容相对于列表而言比较简单,只要记住元组是不可变类型,那也就能知道元组是不能添加或删除元素的。要想实现元组的更新等操作,那就使用可变类型的数据类型作为其元素,如列表等。