数据存储
一、列表
1、列表的概念
列表是一种存储大数据的存储模型
2、列表的特点
列表具有索引的概念,可以通过索引操作列表中的数据,列表中的数据可以进行添加、删除、修改、查询等操作。
3、列表的基本用法
创建列表: 变量名 = [数据1,数据2,……]
获取列表数据: 变量名[索引]
修改列表数据: 变量名[索引] = 值
list1 = [2,"test.py",True,None,"haha"]
print(list1[4])
list1[4] = "heihei"
4、列表常用方法(基本操作)
1、append:追加
方法名:append(data)
功能:在列表的末尾添加数据
代码演示:
list1 = [1,2,3,4,5]
list1.append(6) # append(data) data 代表加入到列表中的数据
print(list1)
运行结果:
[1, 2, 3, 4, 5, 6]
2、insert:插入
方法名:insert(idx,data)
功能:打印结果:在列表的指定位置插入数据,如果索引位置超过列表数据总量,数据将插入到列表末尾
代码演示:
list1 = [1,2,3,4,5]
list1.insert(0,"hello") # 在索引为 0 的地方插入 "hello",其余数据整体后移一位。
print(list1)
运行结果:
['hello', 1, 2, 3, 4, 5]
3、extend:追加全部
方法名:extend(model)
功能:在列表的末尾添加参数对象中的所有数据
model:保存有数据的存储模型,该模型接受列表、元组、集合类型的对象
代码演示:
list1 = [1,2,3]
list2 = [4,5,6]
tuple2 = (7,8,9)
set2 = {10,11,12}
list1.extend(list2)
list1.extend(tuple2)
list1.extend(set2)
print(list1)
运行结果:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
4、remove: 删除
方法名:remove(data)
功能:从列表中删除指定的数据,如果数据不存在将报错
data:要从列表中删除的数据
代码演示:
list1 = [1,2,3,4,5]
list1.remove(1) # 从列表中删除 1 这个数据
print(list1)
运行结果:
[2, 3, 4, 5]
5、pop:获取删除,删除数据,并返回这个数据
方法名:pop(idx)
功能:从列表中获取并删除指定索引位置上的数据,如果索引值超过列表数据总量将报错
idx: 要从列表中获取的数据对应的索引位置
返回值:返回被删除的值
代码演示:
list1 = [1, 2, 3, 4, 5]
list2 = list1.pop(1) # 删除索引为 1 的数据,并返回该值
print(list2)
print(list1)
运行结果:
2 # 这个是被删掉的值
[1, 3, 4, 5]
6、clear: 清空
方法名:clear() 功能:清空列表中的数据 返回值:
代码演示:
list1 = [1, 2, 3, 4, 5]
list1.clear()
print(list1)
运行结果:
[]
7、index: 查询位置
方法名:index(data)
功能:查询列表中指定数据对应的索引,如果数据不存在将报错
data:在列表中要查询的数据
返回值:查询数据第一次出现的索引
代码演示:
list1 = [1, 2, 3, 4, 5]
print(list1.index(4)) # 该操作会返回数据的索引值
运行结果:
3
8、count:统计数据
方法名:count(data)
功能:统计列表中指定数据出现的数量
data:在列表中要统计数量的数据
返回值:统计数据出现的次数
代码演示:
list1 = [1, 2, 3, 4, 5, 3, 4, 2, 1]
print(list1.count(4)) # 统计数据中 4 的个数
运行结果:
2
二、元组
1、元组的概念
元组是一种存储固定数据的存储模型
2、元祖的特点
元组具有索引的概念,可以通过索引操作元组里面的数据。元组中的数据可以进行查询操作,但不能进行添加、删除、修改操作。
3、元组的基本用法
创建元祖: 变量名 = (数据一,数据二,数据三,···)
tuple1 = (1, 2, 34, 5, 6,)
print(tuple1)
4、元组常用方法(基本操作)
1、index:查询位置
方法名:index(data) 功能:查询元组中指定数据对应的索引,如果数据不存在将报错 data:在元组中要查询的数据 返回值:查询数据第一次出现的索引
代码演示:
tuple1 = (1, 2, 3, 4, 5)
print(tuple1.index(4)) # 该操作会返回数据的索引值
运行结果:
3
2、count:统计数据
方法名:count(data)
功能:统计元组中指定数据出现的数量
data:在元组中要统计数量的数据
返回值:统计数据出现的次数
代码演示:
tuple1 = (1, 2, 3, 4, 5, 3, 4, 2, 1)
print(tuple1.count(5))
运行结果:
1
5、注意事项
- 元组中的数据如果是非引用类型数据,不允许修改
- 元组中的数据如果是引用类型对象,该对象不允许替换,而对象的属性值可以发生改变
6、元组的特殊应用
自动组包:将多个数据赋值给一个变量时,多个数据将包装成一个元组,将元组赋值给变量,该过程称为自动组包。
应用场景:设置返回值为多个值
return 1,2,3 等同于 return (1,2,3)
应用场景:动态字符串赋值传值方式
print(“坐标%d,%d” % (10,20))
自动解包:将元组赋值给多个变量时,如果元组数据的数量与变量的数量相同,元组将被自动拆分成多个值,并赋值给对应变量,该过程称为自动解包。
场景:多个变量接收返回值
a,b,c = func()等同于 a,b,c = (1,2,3)等同于a,b,c = 1,2,3
场景:动态字符串赋值取值方式
print(“坐标%d,%d” % (10,20)) 将10给第一个%d,将20给第二个%d
三、集合
1、集合的概念
几何是一种存储大量无序不重复数据的存储模型。
2、集合的特点
集合没有索引的概念。集合中的数据可以进行添加、删除等操作。
3、集合的进本语法
创建集合:
变量名 = {数据一,数据二,数据三,···}
set1 = {9,29,"hello"}
4、集合常用方法(基本操作)
1、add:添加
方法名:add(data)
功能:在集合中添加数据。
data:加入到集合中的数据
代码演示:
set1 = {1, 23, "hello"}
set1.add(4) # 将数据 4 添加到集合中
print(set1)
运行结果:
{1, 'hello', 4, 23}
2、remove:删除
方法名:remove(data)
功能:从集合中删除指定的数据,如果数据不存在将报错
data:要从集合中删除的数据
代码演示:
set1 = {1, 23, "hello"}
set1.remove(1) # 删除掉数据为 1 的数据
print(set1)
运行结果:
{'hello', 23}
3、pop:获取删除
方法名:pop()
功能:从集合中获取并删除第一个数据
返回值:获取到的值
代码演示:
"""集合中的数据时自动排序的"""
set1 = {1, 23, "hello", "1.py"}
print(set1)
set1.pop()
print(set1)
运行结果:
{'hello', 1, '1.py', 23}
{1, '1.py', 23}
4、clear:清空
方法名:clear()
功能:清空集合中的数据
代码演示:
set1 = {1, 23, "hello", "1.py"}
set1.clear()
print(set1)
运行结果:
set()
四、字典
1、字典的概念
字典是一种使用“键值对结构”存储数据的存储模型。
2、字典的特点
字典不具有索引的概念,字典使用键 key 代替索引,可以通过键操作字典中存储的数据值value。字典可以根据键key进行数据的添加、删除、修改、查询操作。
3、字典的基本语法
创建字典: 变量名 = {键1:值1,键2:值2,……}
添加数据: 变量名[键] = 值 (字典中没有对应的键)
获取数据: 变量名[键]
修改数据: 变量名[键] = 值 (字典中存在对应的键)
代码演示:
dict1 = {"name": "test", "age": 11,}
print(dict1)
dict1["sex"] = 1 # 如果原始字典里面没有这个键名,这个操作就是新增
print(dict1)
dict1["age"] # 这个是获取键名为 "age" 对应的值
print(dict1["age"])
dict1["name"] = "haha" # 如果原始字典里面有这个键名,这个操作就是修改键名所对应的值
print(dict1)
运行结果:
{'name': 'test', 'age': 11}
{'name': 'test', 'age': 11, 'sex': 1}
11
{'name': 'haha', 'age': 11, 'sex': 1}
4、字典常用方法(基本操作)
1、pop :删除获取
方法名:pop(key)
功能:从字典中删除指定键key对应的键值对,如果键key不存在将报错
key:要删除的值 value 对应的键 key
返回值:被删除的值value
代码演示:
"""使用 pop(key) 删除时,会返回被删除的值value """
dict1 = {"name": "test", "age": 11,}
v1 = dict1.pop("name")
print(v1)
print(dict1)
运行结果:
test
{'age': 11}
2、popitem: 删除
方法名:popitem() 功能:从字典中默认删除最后一个键key对应的键值对,如果键key不存在将报错 key:要删除的键值对对应的键key 返回值:被删除的键值对,以元组的形式返回 被删除的键值对,以元组的形式返回
代码演示:
dict1 = {"name": "test", "age": 11, "sex": 1}
v1 = dict1.popitem()
print(v1)
print(dict1)
运行结果:
('sex', 1)
{'name': 'test', 'age': 11}
3、clear:清空
方法名:clear()
功能:清空字典中数据
代码演示:
dict1 = {"name": "test", "age": 11, "sex": 1}
dict1.clear()
print(dict1)
运行结果:
{}
4、setdefault: 检测添加
方法名:setdefault(key,value)
功能:添加新的键值对,如果存在对应的键,则忽略该操作
key:要添加的新键值对对应的键key
value: 要添加的新键值对对应的值value
返回值:字典中key对应的值,如果是添加则返回参数value,如果不是添加,返回原始key对应的value
代码演示:
dict1 = {"name": "test", "age": 11, "sex": 1}
se1 = dict1.setdefault("sex",0)
print(se1)
print(dict1)
运行结果:
1
{'name': 'test', 'age': 11, 'sex': 1}
5、update :更新数据
方法名:update(dict)
功能:使用新字典中的数据对原始字典中的数据进行更新
dict: 新字典对象
代码演示:
dict1 = {"name":"itcast","age":11}
dict2 = {"address":"北京","age":22}
dict1.update(dict2) # 对于原始字典中原有的键名对应的值进行更新,如果原始字典没有,则默认追加。
print(dict1)
运行结果:
{'name': 'itcast', 'age': 22, 'address': '北京'}
6、get:获取
方法名:get(key)
功能:根据键 key 查询字典中对应的值,如果键 key 不存在将返回 None
key:要查询的键 key
返回值:根据键key在字典中查询的值value
代码演示:
dict1 = {"name": "haha", "age": 11}
val = dict1.get("age")
print(val)
运行结果:
11
7、keys:获取键列表
方法名:keys()
功能:获取字典中所有的键key组成的列表数据
返回值:有所有的键组成的列表
代码演示:
dict1 = {"name": "haha", "age": 11}
print(dict1.keys())
运行结果:
dict_keys(['name', 'age'])
8、values:获取值列表
方法名:values()
功能:获取字典中所有的值value组成的列表数据
返回值:由所有值组成的列表
代码演示:
dict1 = {"name": "haha", "age": 11}
print(dict1.values())
运行结果:
dict_values(['haha', 11])
9、items:获取健值对列表
方法名:items()
功能:获取字典中所有的键值对列表数据
返回值:由键值对组成的列表,键值对的格式是元组数据
演示代码:
dict1 = {"name": "haha", "age": 11}
print(dict1.items())
运行结果:
dict_items([('name', 'haha'), ('age', 11)])
5、注意事项
字典中的键是唯一的
6、字典的作用
1、当需要存储少量数据,并期望在编程期以最快的速度获取单个数据,推荐选择字典。
2.当需要使用非对象格式保存单个对象的属性值,推荐选择字典。
五、格式转换
| 转换成列表 | 转换成元组 | 转换成集合 | |
|---|---|---|---|
| 列表list | — | tuple(列表对象) | set(列表对象) |
| 元组tuple | list(元组对象) | — | set(元组对象) |
| 集合set | list(集合对象) | tuple(集合对象) | — |
六、for 循环
1、for 循环作用
for 循环用于对数据存储模型进行访问遍历
2、for 循环基本语法
for 变量名 in 列表:
变量相关操作
代码演示:
list1 = [1,2,5,6,6]
for i in list1:
print(i)
运行结果:
1
2
5
6
6
七、range
1、range 的功能
创建连续的整数
2、range 的基本语法
格式1:range(m) 生成 0 到 m-1 的整数
格式2:range(m,n) 生成 m 到 n-1 的整数
格式3:range(m,n,s) 生成 m 到 n-1 的整数,整数间隔为s
3、range 的应用场景
1.配合for循环构造指定次数的循环
for _ in range(..):
____循环执行的代码
2.快速创建由连续的整数作为数据的列表、元组、集合对象
list(range(..))
tuple(range(..))
set(range(..))
八、数据存储结构嵌套
1、数据存储结构嵌套概念
数据结构嵌套指一种数据结构中包含的数据是另一种数据结构 代码演示:
list1 = [1, 2, 5, 6, 6]
tuple1 = (7, 8, 9)
set1 = {10, 11, 12}
dict1 = {"name": 1, "age": 18}
list2 = [list1, tuple1, set1, dict1]
print(list2)
运行结果:
[[1, 2, 5, 6, 6], (7, 8, 9), {10, 11, 12}, {'name': 1, 'age': 18}]
九、公共方法
1、len :数据总量
方法名:len(model)
功能:获取容器模型中的数据总量
model:保存有数据的存储模型,该模型接受各种容器
返回值:容器模型中数据的总量
代码演示:
list1 = [1, 2, 5, 6, 6]
print(len(list1))
运行结果:
5
2、min :最小值
方法名:min(model)
功能:获取容器模型中的最小值,对于字典获取字典的键key的最小值
model: 保存有数据的存储模型,该模型接受各种容器
返回值:容器模型中数据最小的值
代码演示:
list1 = [1, 2, 5, 6, 6]
print(min(list1))
运行结果:
1
3、max :最大值
方法名:max(model)
功能:获取容器模型中的大小值,对于字典获取字典的键key的最大值
model: 保存有数据的存储模型,该模型接受各种容器
返回值:容器模型中数据最大的值
代码演示:
list1 = [1, 2, 5, 6, 6]
print(max(list1))
运行结果:
6
十、切片
1、切片的作用
获取列表、元组或字符串中的局部数据
2、切片的基础语法
容器对象[开始索引:结束索引:步长]
3、特殊格式:
省略开始索引:默认开始索引为0
范例:list1[:5:1] 等同于 list1[0:5:1]
省略结束索引:默认结束索引为数据总量
范例:list1[0::1] 等同于 list1[0:len(list1):1]
省略步长:每次递增索引数为1
范例:list1[0:5:] 等同于 list1[0:5:1]
负数步长: 反向操作/反向步长操作,需要开始索引、结束索引逆序输入
范例:list1[5:0:-1]
常见格式:
范例:list1[:5:] 获取索引5之前的数据(不含5)
范例:list1[4::] 获取索引4之后的数据(含4)
十一、通用运算符
| 运算符 | 功能 | 格式 | 适用范围 |
|---|---|---|---|
| + | 将两个容器数据合并放入第一个容器 | list1 + list2 | 列表之间或元组之间(列表与元组之间报错) |
| * | 将容器数据复制n次放入容器中 | list1 * n | 列表、元组 |
| in | 判断容器中是否包含数据 | data in list1 | 列表、元组、集合、字典(字典判断数据是否在keys()中) |
| not in | 判断容器中是否不包含数据 | data not in list1 | 列表、元组、集合、字典(字典判断数据是否不在keys()中) |
| >、>=、==、<=、< | 比较两个容器中的数据关系 | list1 <= list2 | 列表、元组、集合 |
十二、for…else
1、for…else基本语法
for 变量名 in 列表:
变量相关操作
else:
循环正常运行结束后执行的操作
代码演示:
for data in range(5):
print(data)
else:
print("end")
运行结果:
0
1
2
3
4
end
2、注意事项
- 1.如果for循环中执行了break语句,则else中的代码将不执行
- 2.while循环同样具有while…else语法格式
十三、推导式
1、推导式基本语法
基础语法格式: 循环变量 for循环
范例:list1 = [data for data in range(5)]
数据处理语法格式: 表达式 for循环
范例:list1 = [data*5 for data in range(5)]
数据过滤语法格式: 表达式 for循环 if判断
范例:list1 = [data for data in range(5) if data > 200]
2、推导式的作用
推导式可以快速生成数据存储结构中的数据
范例1:创建包含1到100所有整数的列表
list1 = [data for data in range(1,101)]
范例2:创建包含1到10的平方和的列表
list2 = [data**2 for data in range(1,11)]
范例3:创建字典,key从1到5,value是key的平方
dict1 = [(data,data**2) for data in range(1,6)]