数据容器
一种可以容纳多份数据的数据类型,容纳的每一份数据称之为1个元素。
每一个元素可以是任意类型的数据。
列表
# 字面量
[元素1,元素2,元素3,...]
# 定义变量
变量名称 = [元素1,元素2,元素3,...]
# 定义空列表
变量名称 = []
变量名称 = list()
列表以 [ ] 为标识,每个数据称为元素,用逗号隔开。
【注:列表存储的多个数据的数据类型没有任何限制,可以为不同的数据类型,支持嵌套。】
列表的下标索引:
格式:列表[索引]
- 从0开始,依次递增,可通过下标获取对应位置的元素。
- 也可以反向索引,从后向前,从-1开始,依次递减。
【注:通过索引取元素时不要超过范围。】
列表的方法:
将函数定义为class(类)的成员,那函数称之为方法。
方法和函数功能一样,有传入参数和返回值,只是方法的使用格式不同。
- 查询方法
功能:查找指定元素在列表的下标,如果找不到则报错ValueError
语法:列表.index(元素) - 修改方法
功能:修改特定位置的元素值
语法:列表[下标] = 值 - 插入方法
功能:在指定的下标位置插入指定的元素
语法:列表.insert(下标,元素) - 追加单个元素
功能:将指定元素追加到列表的尾部
语法:列表.append(元素) - 追加数据容器(多个元素)
功能:将其他数据容器的内容取出,依次追加到列表尾部
语法:列表.extend(其他数据容器) - 通过下标删除元素
语法1:del 列表[下标]
语法2:列表.pop(下标)
【注:pop方法会返回取出的元素。】 - 通过remove指定元素删除
功能:删除某元素在列表中的第一个匹配项
语法:列表.remove(元素)
【注:remove方法会从头开始进行匹配,只能删掉第一个。】 - 清空
功能:清空列表内容。
语法:列表.clear() - 统计某元素在列表内的数量
语法:列表.count(元素) - 统计元素总数
可以得到一个int数字,表示列表内的元素数量。
语法:len(列表)
特点:
- 可以容纳多个元素(上限为263-1个)
- 可以容纳不同类型的元素
- 数据是有序存储(有下标)
- 允许重复数据存在
- 可以修改(增删元素等)
元组
定义元组使用小括号,且使用逗号隔开各个数据,数据可以是不同的数据类型。
【注:元组一旦定义不可修改。】
# 定义元组字面量
(元素1, 元素2, ...)
# 定义元组变量
变量名称 = (元素1, 元素2, ...)
# 定义空元组
变量名称 = ()
变量名称 = tuple()
【注:元组只有一个数据时,这个数据后面要添加括号,否则不是元组类型。】
元组和列表一样可使用下标获取元素。
元组的操作:
- index()
查找某个数据,如果数据存在返回对应的下标,否则报错 - count()
统计某个数据在当前元组出现的次数 - len(元组)
统计元组内的元素个数
注意事项:
- 不可修改元组的内容,否则会报错
- 可以修改元组内的list的内容
元组的特点:和list基本相同,唯一不同在于不可修改。
字符串
字符串是字符的容器,可存放任意数量的字符。
字符串也可通过下标获取元素值:
- 从前向后,从0开始,依次递增
- 从后向前,从-1开始,依次递减
【注: 字符串是一个无法修改的容器,只能存储字符串。】
字符串的操作:
- 查找特定字符串的下标
语法:字符串.index(字符串) - 字符串的替换
语法:字符串.replace(字符串1, 字符串2)
功能:将字符串内的全部字符串1替换为字符串2
【注:不是修改字符串本身。而是得到一个新字符串。】 - 字符串的分割
功能:按照指定的分隔符字符串,将字符串划分为多个字符串,并存入列表中
【注:字符串本身不变,而是得到了一个列表对象。】 - 字符串的规整(去前后空格)
语法:字符串.strip()
功能:去除前后的空格和回车符,会返回新的字符串 - 字符串规整(去除前后指定字符串,返回新字符串)
语法:字符串.strip(字符串)
【注:传入“12”,那“1”和“2”都会被去除,是按照单个字符。】 - 统计某字符串出现次数
语法:字符串.count(字符串) - 统计字符串长度
语法:len(字符串)
字符串比较:基于ASCLL码表的码值大小按位进行比较,一位位进行比较,其中一位大,后面就无需比较了。
序列
内容连续,有序,可使用下标索引的一类数据容器。(列表,元组,字符串都是序列)
切片:从一个序列中取出一个子序列。
语法:序列[起始下标: 结束下标: 步长]
- 起始下标表示从何处开始,留空则表示从头开始
- 结束下标(不包含)表示何处结束,留空表示截取到结尾。
- 步长表示依次取元素的间隔。(默认为1)
【注:步长为负数表示反向取,起始下标和结束下标也要反向标记。】
集合
# 定义集合字面量
{元素, 元素, ...}
# 定义集合变量
变量名称 = {元素, 元素, ...}
# 定义空集合
变量名称 = set()
集合是无序的,不支持下标访问,没有重复元素。
集合和列表一样可进行修改。
集合的操作:
- 添加元素
语法:集合.add(元素)
结果:集合本身被修改,添加了新元素。 - 移除元素
语法:集合.remove(元素)
结果:集合本身被修改,移除了元素。 - 从集合随机取出元素
语法:集合.pop()
功能:从集合随机取出一个元素
结果:得到一个元素的结果,同时集合本身被修改,元素被移除。 - 清空集合
语法:集合.clear()
结果:集合本身被清空。 - 取出两集合的差集
语法:集合1.difference(集合2)
功能:取出两集合差集(集合1有而集合2没有的)
结果:得到一个新集合,集合1和集合2不变。 - 消除两集合的差集
语法:集合1.difference_updata(集合2)
功能:对比集合1和集合2,在集合1内,删除和集合2相同的元素。
结果:集合1被修改,集合2不变。 - 两集合合并
语法:集合1.union(集合2)
功能:将集合1和集合2组合成新集合
结果:得到新集合,集合1和集合2不变。 - 统计元素数量
语法:len(集合)
【注:得到的结果是集合去完重后的元素个数。】 - 遍历
集合不支持下标,无法通过while循环和下标遍历,可以用for循环遍历
字典
字典的定义同样和集合一样使用{},不过存储的元素是一个个的键值对。
# 定义字典字面量
{key: value, key: value, ...}
#定义字典变量
my_dict = {key: value, key: value, ...}
# 定义空字典
my_dict = {}
my_dict = dict()
字典数据的获取:
字典同集合一样,不能使用下标,但字典可以通过key值来取得对应的value.
【注:value值可以重复,key值不能重复,若重复,后面的会将前面的覆盖。】
语法:字典[key]
字典的嵌套:
字典的key和value可以是任意数据类型(key不能为字典)
字典的操作:
- 新增元素
语法:字典[key] = value
结果:字典被修改,新增了元素 - 更新元素
语法:字典[key] = value
结果:字典被修改,元素被更新
【注:字典key不能重复,所以对已存在的key执行上述操作就是更新value值。】 - 删除元素
语法:字典.pop(key)
结果:获得指定key的value,同时字典被修改,指定key的数据被删除。 - 清空字典
语法:字典.clear()
结果:字典被修改,元素被清空。 - 获取全部的key
语法:字典.keys()
结果:得到字典中的全部key - 遍历
方式1:通过获取到全部的key来完成遍历
keys = my_dict.keys()
for key in keys:
print(key)
print(my_dict[key])
方式2:直接对字典进行for循环,每一次循环都是直接得到key
for key in my_dict:
print(key)
print(my_dict[key])
- 统计字典元素数量
语法:len(字典)
分类
数据容器的通用操作
- 遍历
都支持for循环遍历 - 方法
len(容器):统计容器的元素个数
max(容器):统计容器的最大元素
min(容器):统计容器的最小元素 - 类型转换
- list(容器):将给定容器转换为列表
【注:元组和集合转列表只是换了个括号,字符串转列表是将字符串内的每一个字符取出作为列表的每一个元素,字典转列表会将value抛弃,只剩下key。】 - tuple(容器):将给定容器转换为元组
【注:同转换为列表一样,不过括号为小括号。】 - str(容器):将给定容器转换为字符串
【注:数据全部保留,类型变字符串。】 - set(容器):将给定容器转换为集合
【注:同转换为列表类似,括号为大括号,由于集合无序不重复的特性,转换结果会进行去重。】
- 通用排序
sorted(容器, [reverse = True])
将给定容器进行排序,排序结果放入列表中。
【注:reverse默认为False,若想将排序结果反转,可将True传给reverse。】