在python中数据容器是指一种可以容纳多份数据的数据类型,容纳的每一份数据称之为一个元素,这些元素可以是任意类型的数据,如字符串、数字、布尔类型等。
根据数据让其的特点不同,如:
将其分为5类,分别是:
列表(list)、元组(tuple)、字符串(str)、集合(set)、字典(dict)
目录
1.列表(list)
1.1 列表的定义
1. 基本语法
# 字面量
[元素1, 元素2, 元素3 , 元素4.....]
# 定义变量
变量名称 = [元素1, 元素2, 元素3 , 元素4.....]
# 定义空列表
变量名称 = []
变量名称 = list()
列表内的每一个数据,称之为元素,以 [] 作为标识,列表内每一个元素之间用, 逗号隔开。
2.在列表格式中,列表也可以一次存储多个数据,且可以为不同的数据类型,支持嵌套
例如:
list_one = ['python', 666, True]
list_two = [[1, 2, 3], [4, 5, 6]]
1.2 列表的索引(下标)
1.2.1 正向索引
在列表中,每一个元素都有其下标索引,从0开始依次递增。
1.2.2 反向索引
列表也支持反向索引,也就是从后向前,依次递减(-1,-2,-3.......)
1.2.3 嵌套列表的索引
在列表中,如果是嵌套列表,同样也支持索引。
1.3 列表的常用操作
1.3.1 列表查询
1.查找某元素的下标
功能:查找指定元素在列表的下标,如果找不到,报错ValueError
语法:列表.index(元素)
index就是列表对象(变量)内置的方法(函数)
例如:
list_one = ['python', 666, True]
print(list_one.index('python'))
# 输出结果为: 0
2. 统计列表内,有多少元素
语法:len(列表)
可以得到一个int数字,表示列表内的元素数量
1.3.2 列表修改
1.修改特定位置(索引)的元素值:
语法:列表[下标] = 值
可以使用如上语法,直接对指定下标(正向、反向下标均可)的值进行:重新赋值(修改)
2.插入元素:
语法:列表.insert(下标, 元素),在指定的下标位置,插入指定的元素
list_one = [1, 2, 3]
list_one.insert(1, "insert")
print (list_one)
# [1, "insert", 2, 3]
3.追加元素-1:
语法:列表.append(元素),将指定元素,追加到列表的尾部
4.追加元素-2:
语法:列表.extend(其它数据容器),将其它数据容器的内容取出,依次追加到列表尾部
5.删除元素:
语法1: del 列表[下标]
语法2:列表.pop(下标)
6.删除某元素在列表中的第一个匹配项
语法:列表.remove(元素)
7. 清空列表内容
语法:列表.clear()
8. 统计某元素在列表内的数量
语法:列表.count(元素)

1.4 列表的遍历
1.4.1 while循环
既然数据容器可以存储多个元素,那么,就会有需求从容器内依次取出元素进行操作。
将容器内的元素依次取出进行处理的行为,称之为:遍历、迭代。
while循环条件如何控制?

1.4.2 for循环
语法:
for 临时变量 in 数据容器:
对临时变量进行处理
例如:
表示,从容器内,依次取出元素并赋值到临时变量上。在每一次的循环中,我们可以对临时变量(元素)进行处理。
结果:
1.4.3 while循环和for循环的对比
while循环和for循环,都是循环语句,但细节不同:
2. 元组(tuple)
列表是可以修改的,元组同列表一样,但不可对其进行更改,元组一旦定义完成,就不可修改,所以,当我们需要在程序内封装数据,又不希望封装的数据被篡改,那么元组就非常合适了。
2.1 元组的定义
元组定义:定义元组使用小括号,且使用逗号隔开各个数据,数据可以是不同的数据类型。
# 定义元组的字面量
(元素, 元素, 元素, 元素.... )
# 定义元组变量
变量名称 = (元素, 元素, 元素, 元素.... )
# 定义空元组
变量名称 = ()
变量名称 = tuple()
注意:元组只有一个数据,这个数据后面要添加逗号
同列表一样,元组也支持嵌套定义
2.2 元组的操作
由于元组不可修改的特性,其操作方法较少,常用的如下:
编号 | 方法 | 作用 |
1 | index() | 查找某个数据,如果数据存在返回对应的下标,否则报错 |
2 | count() | 统计某个数据在当前元组出现的次数 |
3 | len(元组) | 统计元组内的元素个数 |
2.3 元组的循环
同列表一样,元组也支持循环功能,可以使用for循环和while循环,使用方式同list。
3. 字符串(str)
字符串是字符的容器,一个字符串可以存放任意数量的字符。
例如字符串:"string"
3.1 字符串的索引
和其它容器如:列表、元组一样,字符串也可以通过下标进行访问
3.2 字符串的修改
同元组一样,字符串是一个:无法修改的数据容器。
所以:
均无法完成。如果必须要做,只能得到一个新的字符串,旧的字符串是无法修改。
3.3 字符串的操作
1 .查找特定字符串的下标索引值
语法:字符串.index(字符串)
my_str = 'you and me'
print(my_str.index('and'))
#结果:4
2. 字符串的替换
语法:字符串.replace(字符串1,字符串2)
功能:将字符串内的全部:字符串1,替换为字符串2
注意:不是修改字符串本身,而是得到了一个新字符串哦
name = "xiaoming"
new_name = name.replace("ming","hong")
print(new_name) # 结果:xiaohong
print(name) # 结果:xiaoming
如上案例可以看到,字符串name本身并没有发生变化,而是得到了一个新字符串对象。
3. 字符串的分割
语法:字符串.split(分隔符字符串)
功能:按照指定的分隔符字符串,将字符串划分为多个字符串,并存入列表对象中
注意:字符串本身不变,而是得到了一个列表对象
name = "xiaoming xiaohong xiangzhang"
name_list = name.split(" ")
print(name_list) # 结果:["xiaoming", "xiaohong", "xiangzhang"]
上例字符串按照给定的 <空格>进行了分割,变成多个子字符串,并存入一个列表对象中。
4. 字符串的规整操作
1)去前后空格
语法:字符串.strip()
2)去前后指定字符串
语法:字符串.strip(字符串)
5.统计字符串中某字符串的出现次数
语法:字符串.count(字符串)
name = "xiaoming xiaohong xiangzhang"
print(name.count("xiao"))
# 结果:3
6. 统计字符串的长度
语法:len(字符串)
均算作1个字符。
3.4 字符串的遍历
同列表、元组一样,字符串也支持while循环和for循环进行遍历,用法与list相同。
4. 序列
4.1 序列的定义
序列是指:内容连续、有序,可使用下标索引的一类数据容器
列表、元组、字符串,均可以可以视为序列。
如图,序列的典型特征就是:有序并可用下标索引,字符串、元组、列表均满足这个要求
4.2 序列的常用操作 - 切片
序列支持切片,即:列表、元组、字符串,均支持进行切片操作
切片:从一个序列中,取出一个子序列
语法:序列[起始下标:结束下标:步长]
表示从序列中,从指定位置开始,依次取出元素,到指定位置结束,得到一个新序列:
注意,此操作不会影响序列本身,而是会得到一个新的序列(列表、元组、字符串)
my_list = [1, 2, 3, 4, 5]
new_list = my_list[1:4] # 下标1开始,下标4(不含)结束,步长1
print(new_list) # 结果:[2, 3, 4]
my_tuple = (1, 2, 3, 4, 5)
new_tuple = my_tuple[:] # 从头开始,到最后结束,步长1
print(new_tuple) # 结果:(1, 2, 3, 4, 5)
my_list = [1, 2, 3, 4, 5]
new_list = my_list[::2] # 从头开始,到最后结束,步长2
print(new_list) # 结果:[1, 3, 5]
my_str = "12345"
new_str = my_str[:4:2] # 从头开始,到下标4(不含)结束,步长2
print(new_str) # 结果:"13"
my_str = "12345"
new_str = my_str[::-1] # 从头(最后)开始,到尾结束,步长-1(倒序)
print(new_str) # 结果:"54321"
my_list = [1, 2, 3, 4, 5]
new_list = my_list[3:1:-1] # 从下标3开始,到下标1(不含)结束,步长-1(倒序)
print(new_list) # 结果:[4, 3]
my_tuple = (1, 2, 3, 4, 5)
new_tuple = my_tuple[:1:-2] # 从头(最后)开始,到下标1(不含)结束,步长-2(倒序)
print(new_tuple) # 结果:(5, 3)
可以看到,这个操作对列表、元组、字符串是通用的。同时非常灵活,根据需求,起始位置,结束位置,步长(正反序)都是可以自行控制的。
5. 集合(set)
在前几个数据容器中,我们可知道:
局限就在于:它们都支持重复元素。
如果场景需要对内容做去重处理,列表、元组、字符串就不方便了。
而集合,最主要的特点就是:不支持元素的重复(自带去重功能)、并且内容无序。
5.1 集合的定义
基本语法:
# 定义集合的字面量
{元素, 元素, 元素, 元素....}
# 定义集合变量
变量名称 = {元素, 元素, 元素, 元素....}
# 定义空集合
变量名称 = set()
5.2 集合的操作
首先,因为集合是无序的,所以集合不支持:下标索引访问
但是集合和列表一样,是允许修改的,所以我们来看看集合的修改方法。
1. 添加新元素
语法:集合.add(元素)。将指定元素,添加到集合内
结果:集合本身被修改,添加了新元素
2. 移除元素
语法:集合.remove(元素),将指定元素,从集合内移除
结果:集合本身被修改,移除了元素
3. 从集合中随机取出元素
语法:集合.pop(),功能,从集合中随机取出一个元素
结果:会得到一个元素的结果。同时集合本身被修改,元素被移除
4. 清空集合
语法:集合.clear(),功能,清空集合
结果:集合本身被清空
5. 取出2个集合的差集
语法:集合1.difference(集合2),功能:取出集合1和集合2的差集(集合1有而集合2没有的)
结果:得到一个新集合,集合1和集合2不变
6. 消除2个集合的差集
语法:集合1.difference_update(集合2)
功能:对比集合1和集合2,在集合1内,删除和集合2相同的元素。
结果:集合1被修改,集合2不变
7. 2个集合合并
语法:集合1.union(集合2)
功能:将集合1和集合2组合成新集合
结果:得到新集合,集合1和集合2不变
8. 查看集合的元素数量
语法:len(集合)
功能:统计集合内有多少元素
结果:得到一个整数结果
5.3 集合的循环
集合不支持下标索引,所以也就不支持使用while循环。但集合支持for循环用法:
6. 字典
在python中字典采用键值对方式进行定义,类似于json格式或js中的对象。
6.1 字典的定义
字典的定义,同样使用{},不过存储的元素是一个个的:键值对,如下语法:
6.2 字典数据的获取
字典同集合一样,不可以使用下标索引,但是字典可以通过Key值来取得对应的Value:
6.3 字典的嵌套
字典的Key和Value可以是任意数据类型(Key不可为字典)。那么,就表明,字典是可以嵌套的。
例如:
字典:
6.4 字典的常用操作
6.4.1 新增元素
语法:字典[Key] = Value,结果:字典被修改,新增了元素
6.4.2 更新元素
语法:字典[Key] = Value,结果:字典被修改,元素被更新
注意:字典Key不可以重复,所以对已存在的Key执行上述操作,就是更新Value值
6.4.3 删除元素
语法:字典.pop(Key),结果:获得指定Key的Value,同时字典被修改,指定Key的数据被删除
6.4.4 清空字典
语法:字典.clear(),结果:字典被修改,元素被清空
6.4.5 获取全部的key
语法:字典.keys(),结果:得到字典中的全部Key
6.4.6 遍历字典
语法:for key in 字典.keys()
运行结果:
注意:字典不支持下标索引,所以同样不可以用while循环遍历
6.4.7 计算字典内部元素数量
语法:len(字典)
结果:得到一个整数,表示字典内元素(键值对)的数量
7. 数据容器总结
7.1 数据容器分类
数据容器可以从以下视角进行简单的分类:
不支持:元组、字符串
7.2 数据容器特点对比
列表 | 元组 | 字符串 | 集合 | 字典 | |
元素数量 | 支持多个 | 支持多个 | 支持多个 | 支持多个 | 支持多个 |
元素类型 | 任意 | 任意 | 仅字符 | 任意 | Key:Value Key:除字典外任意类型 Value:任意类型 |
下标索引 | 支持 | 支持 | 支持 | 不支持 | 不支持 |
重复元素 | 支持 | 支持 | 支持 | 不支持 | 不支持 |
可修改性 | 支持 | 不支持 | 不支持 | 支持 | 支持 |
数据有序 | 是 | 是 | 是 | 否 | 否 |
使用场景 | 可修改、可重复的一批数据记录场景 | 不可修改、可重复的一批数据记录场景 | 一串字符的记录场景 | 不可重复的数据记录场景 | 以Key检索Value的数据记录场景 |
7.3 各类数据容器应用场景
列表:一批数据,可修改、可重复的存储场景
元组:一批数据,不可修改、可重复的存储场景
字符串:一串字符串的存储场景
集合:一批数据,去重存储场景
字典:一批数据,可用Key检索Value的存储场景