“容器”这两个字很少被 Python 技术文章提起。一看到“容器”,大家想到的多是那头蓝色小鲸鱼:Docker,但python的容器与它没有任何关系。这里的容器,是 Python 中的一个抽象概念,是对专门用来装其他对象的数据类型的统称。
在 Python 中,有四类最常见的内建容器类型:列表(list)、元组(tuple)、字典(dict)、集合(set)。通过单独或是组合使用它们,可以高效的完成很多事情。
Python 语言自身的内部实现细节也与这些容器类型息息相关。比如 Python 的类实例属性、全局变量 globals() 等就都是通过字典类型来存储的。
列表 list

列表与字符串转换
将多个字符串拼接为一个。
result = "连接符".join(列表)
将一个字符串拆分为多个。
列表 = “a-b-c-d”.split(“分隔符”)
列表推导式
- 定义:
使用简易方法,将可迭代对象转换为列表。
- 语法:
变量 = [表达式 for 变量 in 可迭代对象]
变量 = [表达式 for 变量 in 可迭代对象 if 条件]
- 说明:
如果if真值表达式的布尔值为False,则可迭代对象生成的数据将被丢弃。
列表推导式嵌套
- 语法:
变量 = [表达式 for 变量1 in 可迭代对象1 for 变量2 in可迭代对象2]
- 传统写法:
result = []
for r in ["a", "b", "c"]:
for c in ["A", "B", "C"]:
result.append(r + c)
- 推导式写法:
result = [r + c for r in list01 for c in list02]
元组 tuple

定义
- 由一系列变量组成的不可变序列容器。
- 不可变是指一但创建,不可以再添加/删除/修改元素。
基础操作
- 创建空元组:
元组名 = ()
元组名 = tuple()
- 创建非空元组:
元组名 = (20,)
元组名 = (1, 2, 3)
元组名 = 100,200,300
元组名 = tuple(可迭代对象)
- 获取元素:
变量 = 元组名[索引]
变量 = 元组名[切片] # 赋值给变量的是切片所创建的新列表
- 遍历元组:
正向:
for 变量名 in 列表名:
变量名就是元素
反向:
for 索引名 in range(len(列表名)-1,-1,-1):
元组名[索引名]就是元素
作用
- 元组与列表都可以存储一系列变量,由于列表会预留内存空间,所以可以增加元素。
- 元组会按需分配内存,所以如果变量数量固定,建议使用元组,因为占用空间更小。
- 应用:
变量交换的本质就是创建元组:x, y = (y, x )
格式化字符串的本质就是创建元祖:"姓名:%s, 年龄:%d" % ("tarena", 15)
字典 dict

定义
- 由一系列键值对组成的可变散列容器。
- 散列:对键进行哈希运算,确定在内存中的存储位置,每条数据存储无先后顺序。
- 键必须惟一且不可变(字符串/数字/元组),值没有限制。
基础操作
- 创建字典:
字典名 = {键1:值1,键2:值2}
字典名 = dict (可迭代对象)
- 添加/修改元素:
语法:
字典名[键] = 数据
说明:
键不存在,创建记录。
键存在,修改值。
- 获取元素:
变量 = 字典名[键] # 没有键则错误
- 遍历字典:
for 键名 in 字典名:
字典名[键名]
for 键名,值名 in 字典名.items():
语句
- 删除元素:
del 字典名[键]
字典推导式
- 定义:
使用简易方法,将可迭代对象转换为字典。
- 语法:
{键:值 for 变量 in 可迭代对象}
{键:值 for 变量 in 可迭代对象 if 条件}
集合 set

定义
- 由一系列不重复的不可变类型变量(元组/数/字符串)组成的可变散列容器。
- 相当于只有键没有值的字典(键则是集合的数据)。
基础操作
- 创建空集合:
集合名 = set()
集合名 = set(可迭代对象)
- 创建具有默认值集合:
集合名 = {1, 2, 3}
集合名 = set(可迭代对象)
- 添加元素:
集合名.add(元素)
- 删除元素:
集合名.discard(元素)
运算
- 交集&:返回共同元素。
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s3 = s1 & s2 # {2, 3}
- 并集:返回不重复元素
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s3 = s1 | s2 # {1, 2, 3, 4}
- 补集-:返回只属于其中之一的元素
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s1 - s2 # {1} 属于s1但不属于s2
补集^:返回不同的的元素
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s3 = s1 ^ s2 # {1, 4} 等同于(s1-s2 | s2-s1)
- 子集<:判断一个集合的所有元素是否完全在另一个集合中
- 超集>:判断一个集合是否具有另一个集合的所有元素
s1 = {1, 2, 3}
s2 = {2, 3}
s2 < s1 # True
s1 > s2 # True
- 相同或不同== !=:判断集合中的所有元素是否和另一个集合相同。
s1 = {1, 2, 3}
s2 = {3, 2, 1}
s1 == s2 # True
s1 != s2 # False
子集或相同,超集或相同 <= >=
集合推导式
- 定义:
使用简易方法,将可迭代对象转换为集合。
- 语法:
{表达式 for 变量 in 可迭代对象}
{表达式 for 变量 in 可迭代对象 if 条件}
