定义
Python 中的数据容器是一种可以容纳多份数据的数据类型,容纳的每一份数据称之为 1 个元素。每一个元素可以是任意类型的数据,如字符串、数字、布尔等。
数据容器根据特点的不同(是否支持重复元素、是否可以修改、是否有序等)分为 5 类,分别是:列表 (list)、元组 (tuple)、字符串 (str)、集合 (set)、字典 (dict)。
列表
基本语法
# 字面量
my_list = [element1, element2, element3, element4]
# 定义空列表
my_list = []
my_list = list()
列表内的每一个数据称之为元素,以 [] 作为标识,列表内每一个元素之间用逗号隔开。
列表索引
列表的每一个元素都有编号称之为下标索引:
- 从前向后的方向,编号从 0 开始递增。
- 从后向前的方向,编号从 -1 开始递减。
列表的方法
| 编号 | 使用方式 | 作用 |
|---|---|---|
| 1 | 列表.append(元素) | 向列表中追加一个元素 |
| 2 | 列表.extend(容器) | 将数据容器的内容依次取出,追加到列表尾部 |
| 3 | 列表.insert(下标,元素) | 在指定下标处,插入指定的元素 |
| 4 | del 列表 [下标] | 删除列表指定下标元素 |
| 5 | 列表.pop(下标) | 删除列表指定下标元素 |
| 6 | 列表.remove(元素) | 从前向后,删除此元素第一个匹配项 |
| 7 | 列表.clear() | 清空列表 |
| 8 | 列表.count(元素) | 统计此元素在列表中出现的次数 |
| 9 | 列表.index(元素) | 查找指定元素在列表的下标,找不到报错 ValueError |
| 10 | len(列表) | 统计容器内有多少元素 |
列表的特点
- 可以容纳多个元素 (上限为 2**63-1)
- 可以容纳不同类型的元素 (混装)
- 数据是有序存储的 (有下标序号)
- 允许重复数据存在
- 可以修改 (增加或删除元素等)
元组
定义
元组定义使用小括号,且使用逗号隔开各个数据,数据可以是不同的数据类型。
# 定义元组字面量
my_tuple = (element1, element2, ..., elementN)
# 定义空元组
my_tuple = ()
my_tuple = tuple()
元组的相关操作
| 编号 | 方法 | 作用 |
|---|---|---|
| 1 | index() | 查找某个数据,如果数据存在返回对应的下标,否则报错 |
| 2 | count() | 统计某个数据在当前元组出现的次数 |
| 3 | len(元组) | 统计元组内的元素个数 |
字符串容器
字符串同样也是数据容器的一员,字符串是字符的容器,一个字符串可以存放任意数量的字符。如:字符串 "Hello World"。
和其它容器如列表、元组一样,字符串也可以通过下标进行访问:
- 从前向后,下标从 0 开始
- 从后向前,下标从 -1 开始
字符串的替换
- 语法:
字符串.replace(str1, str2) - 功能:将字符串内的全部
str1替换为str2 - 注意:不是修改字符串本身,而是得到了一个新字符串
字符串的分割
- 语法:
字符串.split(分隔符) - 功能:按照指定的分隔符字符串,将字符串划分为多个字符串,并存入列表对象中
- 注意:字符串本身不变,而是得到了一个列表对象
字符串常用操作汇总
| 编号 | 操作 | 说明 |
|---|---|---|
| 1 | 字符串 [下标] | 根据下标索引取出特定位置字符 |
| 2 | 字符串.index(字符串) | 查找给定字符的第一个匹配项的下标 |
| 3 | 字符串.replace(str1, str2) | 将字符串内的全部 str1 替换为 str2,不会修改原字符串,而是得到一个新的字符串 |
| 4 | 字符串.split(字符串) | 按照给定字符串,对字符串进行分隔,不会修改原字符串,而是得到一个新的列表 |
| 5 | 字符串.strip() / 字符串.strip(字符串) | 移除首尾的空格和换行符或指定字符串 |
| 6 | 字符串.count(字符串) | 统计字符串内某字符串的出现次数 |
| 7 | len(字符串) | 统计字符串的字符个数 |
字符串的特点
- 只可以存储字符串
- 长度任意 (取决于内存大小)
- 支持下标索引
- 允许重复字符串存在
- 不可以修改 (增加或删除元素等)
- 支持 for 循环
序列
序列是指:内容连续、有序,可使用下标索引的一类数据容器。列表、元组、字符串,均可以视为序列。
语法:序列 [起始下标:结束下标:步长]
表示从序列中,从指定位置开始,依次取出元素,到指定位置结束,得到一个新序列:
- 起始下标表示从何处开始,可以留空,留空视作从头开始
- 结束下标 (不含) 表示何处结束,可以留空,留空视作截取到结尾
- 步长表示,依次取元素的间隔
- 步长 1 表示,一个个取元素
- 步长 2 表示,每次跳过 1 个元素取
- 步长 N 表示,每次跳过 N-1 个元素取
- 步长为负数表示,反向取 (注意,起始下标和结束下标也要反向标记)
注意,此操作不会影响序列本身,而是会得到一个新的序列 (列表、元组、字符串)。
集合
基本语法
# 定义集合字面量
my_set = {element1, element2, ..., elementN}
# 定义空集合
my_set = set()
首先,因为集合是无序的,所以集合不支持下标索引访问,但是集合和列表一样,是允许修改的。
集合常用功能总结
| 编号 | 操作 | 说明 |
|---|---|---|
| 1 | 集合.add(元素) | 集合内添加一个元素 |
| 2 | 集合.remove(元素) | 移除集合内指定的元素 |
| 3 | 集合.pop() | 从集合中随机取出一个元素 |
| 4 | 集合.clear() | 将集合清空 |
| 5 | 集合 1.difference(集合 2) | 得到一个新集合,内含 2 个集合的差集,原有的 2 个集合内容不变 |
| 6 | 集合 1.difference_update(集合 2) | 在集合 1 中,删除集合 2 中存在的元素,集合 1 被修改,集合 2 不变 |
| 7 | 集合 1.union(集合 2) | 得到 1 个新集合,内含 2 个集合的全部元素,原有的 2 个集合内容不变 |
| 8 | len(集合) | 得到一个整数,记录了集合的元素数 |
集合的特点
- 可以容纳多个数据
- 可以容纳不同类型的数据 (混装)
- 数据是无序存储的 (不支持下标索引)
- 不允许重复数据存在
- 可以修改 (增加或删除元素等)
- 支持 for 循环
字典
定义
字典的定义,同样使用花括号 {} 存储,但存储的元素是一个个的键值对。
# 定义字典字面量
my_dict = {key: value, key: value, ...}
# 定义空字典
my_dict = {}
my_dict = dict()
字典的注意事项
- 键值对的 Key 和 Value 可以是任意类型 (Key 不可为字典)
- 字典内 Key 不允许重复,重复添加等同于覆盖原有数据
- 字典不可用下标索引,而是通过 Key 检索 Value
字典的常用操作总结
| 编号 | 操作 | 说明 |
|---|---|---|
| 1 | 字典 [Key] | 获取指定 Key 对应的 Value 值 |
| 2 | 字典 [Key] = Value | 添加或更新键值对 |
| 3 | 字典.pop(Key) | 取出 Key 对应的 Value 并在字典内删除此 Key 的键值对 |
| 4 | 字典.clear() | 清空字典 |
| 5 | 字典.keys() | 获取字典的全部 Key,可用于 for 循环遍历字典 |
| 6 | len(字典) | 计算字典内的元素数量 |
字典的特点
- 可以容纳多个数据
- 可以容纳不同类型的数据
- 每一份数据是 KeyValue 键值对
- 可以通过 Key 获取到 Value,Key 不可重复 (重复会覆盖)
- 不支持下标索引
- 可以修改 (增加或删除更新元素等)
- 支持 for 循环,不支持 while 循环
数据容器分类
数据容器可以从以下视角进行简单的分类:
- 是否支持下标索引
- 支持:列表、元组、字符串 (序列类型)
- 不支持:集合、字典 (非序列类型)
- 是否支持重复元素
- 支持:列表、元组、字符串 (序列类型)
- 不支持:集合、字典 (非序列类型)
- 是否可以修改
- 支持:列表、集合、字典
- 不支持:元组、字符串
数据容器特点对比


