前言
上一讲分享了数据结构中的列表 list,本讲将走进元组 tuple。采用 Q & A 的形式讲解几点思考并采用脑图的形式进行总结。
Q1:什么是 tuple
tuple 是存储数据的容器之一,可以存储 int, float, string 以及 tuple(即嵌套);用圆括号标识,元素之间用逗号隔开。tuple 是不可变序列 seq,即指向的元素不可以二次赋值。
# 示例
>>> tup = (10,10.0,'hello',(1,2))
>>> print(tup,type(tup))
(10, 10.0, 'hello', (1, 2)) <class 'tuple'>
Q2:为什么说 tuple 不可变
每次重新赋值实质上已经更换了内存地址,不再是上一个 tuple。
# 示例
>>> tup = (10,10.0,'hello',(1,2))
>>> id(tup)
2274711670120
>>> tup = (1,2)
>>> id(tup)
2274711756936
Q3:如何访问 tuple 中的元素
这就需要索引 (index)、切片 (slice) 以及步长 (stride)。
- index 是 seq 的通用操作,本质上就是编号,从0开始计数,-1表示末位,便于计算机快速访问到指定元素
# 示例
>>> tup = (10,10.0,'hello',(1,2))
>>> print(tup[0])
10
>>> print(tup[-1])
(1, 2)
- slice 代表一个范围,由 index 组成,之间用 :隔开,注意左闭右开,便于计算机快速访问某个范围的所有元素
# 示例 >>> tup = (10,10.0,'hello',(1,2))
>>> print(tup[1:2])
(10.0,)
>>> print(tup[:2])
(10, 10.0)
>>> print(tup[1:])
(10.0, 'hello', (1, 2))
>>> print(tup[0:-1])
(10, 10.0, 'hello')
>>> print(tup[:])
(10, 10.0, 'hello', (1, 2))
- stride 便于计算机间隔访问 list 的某些元素
#示例
>>> tup = (10,10.0,'hello',(1,2))
>>> print(tup[0:2:2])
(10,)
>>> print(tup[::2])
(10, 'hello')
Q4:如何变更 tuple
虽然 tuple 指向的元素不可以二次赋值,但是 tuple 本身还是可以做一些微调操作,比如重复,连接,删除,转型。下表列举了常用的内置函数。
函数 | 描述 |
---|---|
len(tup) | 返回 tup 长度 |
max(tup) | 返回 tup 最大值 |
min(tup) | 返回 tup 最小值 |
tuple(seq) | 把 seq 转换为 tuple |
下表是常用的 tuple 运算符。
函数 | 描述 |
---|---|
tup1 + tup2 | 连接 tup1 与 tup2 |
tup * 2 | 重复2次 |
a in tup | 判别 a 是否在 tup 中 |