概述

Python 中具有一些内建的数据结构,这些数据结构能方便地存储数据,并具有特殊的方法来获取或操纵数据。

常用的内建数据结构包括:

  • 列表(List)是一种有序的集合,可以随时添加和删除其中的元素。
  • 元组(Tuple)是另一种有序的集合,与列表相似,但一旦初始化就不能修改。
  • 集合(Set)是一个无序的不含重复元素的集合。
  • 字典(Dictionary)是一个无序的“键: 值”对的集合,其中每个键必须是唯一的。

这四种类型都相当于存储数据的容器,也可统称为容器(Container)类型或集合(Collection)类型。

Python 中常见的内置数据结构

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 循环中
数据结构列表