前言
上一讲分享了 Python 的基本数据类型有数字 (Number) 和字符串 (String),常用的有整型 (int)、浮点型 (float) 以及 String。有了数据之后,如何用恰当有效的容器存储这些数据并进行相应的数据操作才是关键。本讲开始将分享数据结构,Python 的数据结构主要包含列表 (list)、元组 (tuple)以及字典 (dict),前两者属于序列 (seq),后者属于映射 (map)。 本讲走进 list,采用 Q&A 形式分享个人的一些思考。
Q1:什么是 list
list 是存储数据的容器之一,可以存储 int、float、string 以及 list(即嵌套);用方括号标识,元素之间用逗号隔开。list 是可变 seq,即指向的元素可以更改,这一点与下一讲介绍的 tuple 相反。
#示例
lst = [10,10.1,'hello',[1,2]]
print(lst,type(lst))
#输出
[10, 10.1, 'hello', [1, 2]] <class 'list'>
Q2:如何访问 list 中的元素
这就需要索引 (index)、切片 (slice) 以及步长 (stride)。
- index 是 seq 的通用操作,本质上就是编号,从0开始计数,-1表示末位,便于计算机快速访问到指定元素
#示例
lst = [10,10.1,'hello',[1,2]]
print(lst[1])
print(lst[-1])
#输出
10.1
[1, 2]
- slice 代表一个范围,由 index 组成,之间用 :隔开,注意左闭右开,便于计算机快速访问某个范围的所有元素
#示例
lst = [10,10.1,'hello',[1,2]]
print(lst[1:2])
print(lst[:2])
print(lst[1:])
print(lst[0:-1])
print(lst[:])
#输出
[10.1]
[10, 10.1]
[10.1, 'hello', [1, 2]]
[10, 10.1, 'hello']
[10, 10.1, 'hello', [1, 2]]
- stride 便于计算机间隔访问 list 的某些元素
#示例
lst = [10,10.1,'hello',[1,2]]
print(lst[0:2:2])
print(lst[::2])
#输出
[10]
[10, 'hello']
Q3:如何更改 list 中的元素
这里的更改可以包含增加,更新,删除,换序等操作,这就涉及到 list 的内置函数和方法了。下表展示了常用的内置函数。
函数 | 描述 |
---|---|
len(lst) | 返回 lst 长度 |
max(lst) | 返回 lst 最大值 |
min(lst) | 返回 lst 最小值 |
list(seq) | 把 seq 转换为 list |
下表是常用的 list 运算符。
函数 | 描述 |
---|---|
lst1 + lst2 | 连接 lst1 与 lst2 |
lst1 * 2 | 重复2次 |
a in lst | 判别 a 是否在 lst 中 |
下表是常用的 list 方法。
函数 | 描述 |
---|---|
lst.append(obj) | lst 末尾增加 obj |
lst.extend(seq) | lst 末尾增加 seq |
lst.insert(index, obj) | lst 的 index 处插入 obj |
lst.pop(index) | 删除 lst 的 index 处的元素 |
lst.remove(obj) | 删除 lst 中 obj 的第一个匹配项 |
lst.clear() | 清空 lst |
lst.sort() | 排序 lst |
lst.reverse() | 反向 lst |
lst.copy() | 复制 lst |
lst.count(obj) | 返回 lst 中 obj 的个数 |
补充说明
在 CV 中,随机数生成器十分常用,所以这里要补充说明一下生成器 range()。其与 list 比较类似,但 index 以及 stride 之间用逗号隔开。
#示例
print(range(5),type(range(5)))
print(range(2,5),type(range(2,5)))
print(range(2,10,2),type(range(2,10,2)))
lst = list(range(5))
print(lst)
#输出
range(0, 5) <class 'range'>
range(2, 5) <class 'range'>
range(2, 10, 2) <class 'range'>
[0, 1, 2, 3, 4]