Python3 元组
Python3 学习笔记 · 整理自菜鸟教程
一句话
元组(tuple)是有序、不可变的序列,用圆括号 () 定义,适合存放不会被修改的数据,可作字典键和集合元素。
要点
- 不可变:创建后不能增删改元素;但元组内若含可变对象(如列表),该对象内容仍可改。
- 单元素语法:必须带逗号,
(5,)是元组,(5)只是整数 5。 - 可省略括号:
t = 1, 2, 3等价于(1, 2, 3)。 - 解包(unpacking):
a, b = (1, 2);星号收集a, *rest = (1, 2, 3)。 - 只有两个方法:
count()和index(),因为不可变所以没有增删方法。 - 可与列表互转:
tuple(lst)/list(tup);list能改,tuple不能。 - 可哈希:元素均可哈希时,元组可作
dict的键、set的元素。
语法 / 常用方法
| 语法/方法 | 说明 | 示例 |
|---|---|---|
t = (1, 2, 3) |
定义元组 | 也可 t = 1, 2, 3 |
t = (5,) |
单元素元组(必须逗号) | (5) 不是元组 |
t = () |
空元组 | — |
t[i] / t[a:b] |
索引 / 切片(返回新元组) | (1,2,3)[1:] → (2,3) |
t.count(x) |
x 出现次数 | (1,1,2).count(1) → 2 |
t.index(x) |
首个 x 的下标 | (1,2).index(2) → 1 |
len(t) |
元素个数 | len((1,2)) → 2 |
x in t |
是否包含 | 2 in (1,2) → True |
t1 + t2 |
拼接成新元组 | (1,) + (2,) → (1,2) |
t * n |
重复 n 次 | (0,) * 3 → (0,0,0) |
a, b = t |
解包 | x, y = (1, 2) |
a, *rest = t |
星号收集剩余 | a, *r = (1,2,3) → a=1, r=[2,3] |
tuple(iter) |
其他可迭代对象转元组 | tuple([1,2]) → (1,2) |
max(t) / min(t) / sum(t) |
最大 / 最小 / 求和 | sum((1,2,3)) → 6 |
del t |
删除整个元组变量 | 不能删单个元素 |
代码示例
1 | |
易错点
- 单元素元组漏逗号:
(5)是 int,(5,)才是元组。 - “不可变”不等于内层不可变:元组里放列表,列表内容仍能改(浅不可变)。
- 元组里放不可哈希对象:
t = (1, [2])不能作字典键,因为列表不可哈希。 - 切片返回新元组,不是共享视图;与列表切片一致。
del t删的是变量引用,不能del t[0](报 TypeError)。- 不加括号的陷阱:
t = 1,是元组;t = 1是整数。