Python 中具有一些内建的数据结构,这些数据结构能方便地存储数据,并具有特殊的方法来获取或操纵数据。
常用的内建数据结构包括:
- 列表(List)是一种有序的集合,可以随时添加和删除其中的元素。
- 元组(Tuple)是另一种有序的集合,与列表相似,但一旦初始化就不能修改。
- 集合(Set)是一个无序的不含重复元素的集合。
- 字典(Dictionary)是一个无序的“键: 值”对的集合,其中每个键必须是唯一的。
这四种类型都相当于存储数据的容器,也可统称为容器(Container)类型或集合(Collection)类型。
Python 中常见的内置数据结构
在这些数据结构中,字符串、列表、元组以及 range、zip、map 和 enumerate 等这些有序类型又都属于序列类型。其中列表、元组、range 对象为三种基本的序列类型。
序列是一块用于存放多个值的连续内存空间,并且按一定顺序排列,每一个值(称为元素)都分配一个数字,称为索引或位置,通过该索引可以取出相应的值。
序列类型支持一些通用的操作,包括索引、切片、拼接(序列相加)、重复(序列与自身多次相加)、用 in 运算符检查某个元素是否是序列成员、通过内置函数计算序列的长度/最大值/最小值等。
集合和字典也支持一些序列操作,但严格来说,他们不属于序列类型,他们都不支持索引、切片、相加和相乘操作。
| 运算 | 结果 |
|---|---|
x in s
|
如果 s 中的某项等于 x 则结果为 True,否则为 False
|
x not in s
|
如果 s 中的某项等于 x 则结果为 False,否则为 True
|
s + t
|
s 与 t 相拼接 |
s * n 或 n * s
|
相当于 s 与自身进行 n 次拼接 |
s[i]
|
s 的第 i 项,起始为 0 |
s[i:j]
|
s 从 i 到 j 的切片 |
s[i:j:k]
|
s 从 i 到 j 步长为 k 的切片 |
len(s)
|
s 的长度 |
min(s)
|
s 的最小项 |
max(s)
|
s 的最大项 |
s.index(x[, i[, j]])
|
x 在 s 中首次出现项的索引号(索引号在 i 或其后且在 j 之前) |
s.count(x) |
x 在 s 中出现的总次数 |
| 运算 | 结果 |
|---|---|
s[i] = x |
将 s 的第 i 项替换为 x |
s[i:j] = t |
将 s 从 i 到 j 的切片替换为可迭代对象 t 的内容 |
del s[i:j] |
等同于 s[i:j] = [] |
s[i:j:k] = t |
将 s[i:j:k] 的元素替换为 t 的元素 |
del s[i:j:k] |
从列表中移除 s[i:j:k] 的元素 |
s.append(x) |
将 x 添加到序列的末尾 (等同于 s[len(s):len(s)] = [x]) |
s.clear() |
从 s 中移除所有项 (等同于 del s[:]) |
s.copy() |
创建 s 的浅拷贝 (等同于 s[:]) |
s.extend(t) 或 s += t |
用 t 的内容扩展 s (基本上等同于 s[len(s):len(s)] = t) |
s *= n |
使用 s 的内容重复 n 次来对其进行更新 |
s.insert(i, x) |
在由 i 给出的索引位置将 x 插入 s (等同于 s[i:i] = [x]) |
s.pop() 或 s.pop(i) |
提取在 i 位置上的项,并将其从 s 中移除 |
s.remove(x) |
删除 s 中第一个 s[i] 等于 x 的项目。 |
s.reverse() |
就地将列表中的元素逆序。 |
列表、元组、集合和字典都属于可迭代对象(即能通过 for 语句遍历的对象),Python 的标准库中内置了许多操作这些可迭代对象的函数,如下所示:
| 运算 | 结果 |
|---|---|
all(iterable) |
当 iterable 为空,或其中的所有元素都为真值返回 True |
any(iterable) |
当 iterable 中的任一元素为真值时返回 True |
sum(iterable, /, start=0) |
从 start 开始自左向右对 iterable 的项求和并返回总计值。 iterable 的项通常为数字,而 start 值则不允许为字符串。 |
str(object)
|
返回 object 的字符串表示形式 |
list(iterable)
|
根据 iterable 创建一个新的列表 |
tuple(iterable)
|
根据 iterable 创建一个新的元组 |
set(iterable)
|
根据 iterable 创建一个新的集合 |
dict(mapping)dict(iterable)
|
根据 mapping 或 iterable 创建一个新的字典 |
reversed(seq)
|
根据序列 seq 生成一个反向的迭代器 |
sorted(iterable)
|
根据 iterable 中的项返回一个新的已排序列表 |
enumerate(iterable, start=0)
|
返回一个枚举对象(由索引和值构成的元组形成的序列),一般用在 for 循环中 |