python之数据存储
- 列表
- 元组
- 集合
- 字典
- 存储类型之间的转换
- 数据存储结构嵌套
- 容器间的运算操作
- 切片
- 推导式
列表
- 概念:列表是一种存储大量数据的存储类型
- 特点
- 列表具有索引概念,可以通过索引操作列表中的数据
- 列表中的数据可以进行添加、删除、修改、查询等操作
- 列表的定义和使用
变量名=[数据1,数据2,……] #创建
变量名[索引] #获取列表中的数据
变量名[索引]=值 #修改列表中的数据
- 操作列表常用方法
方法名 | 功能 | 参数 | 返回值 |
append(data) | 在列表的末尾加数据 | data:要追加的数据 | None |
insert(index,data) | 在列表的指定位置插入数据(如果索引位置超过最大位置,数据将插入到列表末尾) | index:插入数据的索引位置 data:要插入的数据 | None |
extend(model) | 在列表的末尾追加参数对象中的所有数据 | model:保存有数据的存储模型,该模型接受列表、元组、集合类型的对象 | None |
remove(data) | 从列表中删除指定的数据(如果数据不存在将报错) | data:要删除的数据 | None |
pop(index) | 从列表中获取并删除指定索引位置上的数据(如果索引值不存在将报错) | index:指定索引位置 | 获取到的数据 |
clear() | 清空列表中所有数据 | 无 | None |
index(data) | 查询列表中指定数据对应的索引(如果数据不存在将报错) | data:要查询的指定数据 | 查询的数据第一次出现的索引 |
count(data) | 统计列表中指定数据出现的次数 | data:要统计的指定数据 | 统计的数据的出现的次数 |
演示:
元组
- 概念:元组是一种存储固定数据的存储模型
- 特点
- 元组具有索引概念,可以通过索引操作元组中的数据
- 元组中的数据可以进行查询操作,但不能进行添加、删除、修改操作
- 元组的创建和使用
变量名=(数据1,数据2,……) # 创建
变量名[索引] # 获取元素
- 常用方法
方法名 | 功能 | 参数 | 返回值 |
index(data) | 查询元组中指定数据对应的索引(如果数据不存在将报错) | data:要查询的数据 | 查询的数据第一次出现的索引 |
count(data) | 统计元组中指定数据出现的数量 | data:要统计的数据 | 统计的数据的出现次数 |
演示:
- 注意事项
- 元组中的数据如果是非引用类型数据,不允许修改;如果是引用类型对象,该对象不允许替换,而对象的属性值可以发生改变
- 元组的特殊应用:自动解包、自动组包
自动解包:将多个数据赋给一个变量时,多个数据将包装成一个元组,将元组赋值给变量,该过程称为自动组包。
eg:return 1,2,3
相当于return (1,2,3)
自动解包:将元组赋值给多个变量时,如果元组数据的数量与变量的数量相同,元组将被自动拆分成多个值,并赋值给对应变量,该过程称为自动解包。
eg:a,b,c=(1,2,3)
等同于a=1,b=2,c=3
集合
- 概念:集合是一种存储大量无序不重复数据的存储类型
- 特点
- 集合没有索引的概念
- 集合中的元素可以进行添加、删除等操作
- 集合的创建
变量名={数据1,数据2,……}
- 集合常用方法
方法名 | 功能 | 参数 | 返回值 |
add(data) | 向集合中添加数据 | data:要添加的数据 | None |
remove(data) | 从集合中删除指定元素(如果数据不存在将报错) | data:要删除的元素 | None |
pop() | 从集合中获取并删除第一个元素 | 无 | 获取到的数据 |
clear() | 清空集合中所有数据 | 无 | None |
演示:
字典
- 概念:字典是一种使用“键值对结构”存储数据的存储类型
- 特点
- 字典不具有索引概念,字典使用键key代替索引,可以通过键操作字典中存储的数据值value
- 字典可以根据键key进行数据的添加、删除、修改、查询等操作
- 字典的创建和使用
变量名={键1:值1,键2:值2,……} #创建
变量名[键] #获取
变量名[键]=值 #修改
变量名[键]=值 #如果此时键不存在,该语句会添加新键和数据
- 常用方法
方法名 | 功能 | 参数 | 返回值 |
pop(key) | 从字典中删除指定键key对应的键值对(如果键key不存在将报错) | key:要删除的值value对应的key | 被删除的value |
popitem() | 删除并获取字典中最后一对键值对 | 无 | 返回被删除的键值对 |
setdefault(key,value) | 添加新的键值对(如果存在对应的键,则忽略该操作) | key:要添加的新键值对对应的键 value:要添加的新键值对对应的值 | 添加成功返回value,没有添加则返回原始key对应的value |
update(dict) | 使用新字典中的数据对原始字典进行更新 | dict:新字典对象 | None |
get(key) | 根据键key查询字典中对应的值(如果key不存在将返回None) | key:要查询的键key | key对应的value |
keys() | 获取字典中所有的键key组成的列表数据 | 无 | 所有键组成的列表 |
values() | 获取字典中所有的值value组成的列表数据 | 无 | 所有值组成的列表 |
items() | 获取字典中所有键值对列表数据 | 无 | 由键值对组成的列表,键值对的格式是元组数据 |
clear() | 清空字典中所有数据 | 无 | None |
演示:
- 注意事项
- 字典中的键是唯一的
- 当需要存储少量数据,并且期望以最快的速度获取单个数据,推荐使用字典
- 当需要使用非对象格式保存单个对象的属性值,推荐选择字典
存储类型之间的转换
转换成列表 | 转换成元组 | 转换成集合 | |
列表 | - | tuple(列表对象) | set(集合对象) |
元组 | list(元组对象) | - | set(元组对象) |
集合 | list(集合对象) | tuple(集合对象) | - |
数据存储结构嵌套
- 概念:指一种数据结构中包含的数据时另一种数据结构
eg:
list=[1,2,3]
tuple=(4,5)
set={6,7}
dict={"1":8,"2":9}
list1=[list,tuple,set,dict]
- 公共方法
方法名 | 功能 | 参数 | 返回值 |
len(model) | 获取容器中的数据总量 | model:保存有数据的存储模型,该模型接受各种容器 | 容器中的数据总量 |
max(model) | 获取容器中的最大值,对于字典获取字典的键key的最大值 | model:保存有数据的存储模型,该模型接受各种容器 | 容器中数据的最大值 |
min(model) | 获取容器中的最小值,对于字典获取字典的键key的最小值 | model:保存有数据的存储模型,该模型接受各种容器 | 容器中数据的最小值 |
演示:
容器间的运算操作
运算符 | 功能 | 适用范围 | 例子 |
+ | 将两个容器合并放入一个容器 | 列表之间或者元组之间 | list1+list2 |
* | 将容器复制n次放入容器中 | 列表、元组 | list*n |
in | 判断容器中是否包含数据 | 列表、元组、集合、字典(字典判断数据是否在keys()中) | data int list |
not in | 判断容器中是否不包含数据 | 列表、元组、集合、字典(字典判断数据是否在keys()中) | data not in list |
>、>=、==、<=、< | 比较两个容器中的数据关系 | 列表、元组、集合 | list1<=list2 |
演示:
切片
- 作用:获取列表、元组或字符串中的局部数据
- 语法
容器对象[开始索引:结束索引:步长]
# 省略开始索引,默认开始索引为0
eg:list[:3:1]相当于list[0:3:1]
# 省略结束索引:默认结束索引为数据总量
eg:list[0::1]相当于list[0:len(list):1]
# 省略步长:默认每次递增索引数为1
eg:list[0:3:]相当于list[0:3:1]
# 负数步长:反向操作,需要开始索引、结束索引逆序输入
eg:list[5:0:-1]
# 其他格式
eg:list[:5:] # 获取索引5之前的数据(不含5)
eg:list[4::] #获取索引4之后的数据(含4)
演示:
推导式
- 作用:可以快速生成数据存储结构中的数据
- 语法
# 格式一
循环变量 for 循环
# 格式二
表达式 for 循环
# 格式三
表达式 for 循环 if 判断
演示: