一、数据容器概念
相关介绍:
- 一种可以容纳多份数据的数据类型,容纳的每一份数据称之为一个元素。每一个元素,可以是任意类型的数据
- 分为五类:列表[list]、元组(tuple)、字符串(str)、集合{set}、字典{dict}
相应区别:
列表 | 元祖 | 字符串 | 集合 | 字典 | |
---|---|---|---|---|---|
<元素数量> | 多个 | 多个 | 多个 | 多个 | 多个 |
<元素类型> | 任意 | 任意 | 仅字符 | 任意 | key(除字典外任意):value(任意) |
<下表索引> | 支持 | 支持 | 支持 | 不支持 | 不支持 |
<重复元素> | 支持 | 支持 | 支持 | 不支持 | 不支持 |
<可否修改> | 支持 | 不支持 | 不支持 | 支持 | 支持 |
<数据有序> | 是 | 是 | 是 | 否 | 否 |
相应特点:
都支持for循环,集合、字典不支持(无法下标索引)
- 列表: 有一批数据,需要可修改、可重复的存储场景
- 元祖: 有一批数据,不可以修改、但可以重复的存储场景
- 字符串:一串文本字符串的存储场景
- 集合: 有一批数据,需要去重存储场景
- 字典: 有一批数据,需要用key检索value的存储场景
二、数据容器-列表[list]
解释:存放数据,但可以修改
python
语法:[元素1,元素2,...]
1. 列表的创建
python
# 案例
name_list = ['1','sadas',True,'4','5'] # 多种类型,也可以嵌套多个列表
print(name_list)
print(type(name_list)) # 输出都是列表类型: <class 'list'>
2. 列表的方法
2.1. 查询元素
语法:列表.index(元素)
python
# 案例
my_list = ["python","wl","1"]
index = my_list.index("python")
print(f"index的下表索引值是: {index}") # 输出:0
2.2. 索引获取元素
python
# 案例
name_list = ['1','sadas',True,'4','5'] # 代表0,1,2,3,4,5 或者 -5.-4,-3,-2,-1
print(name_list[0]) # 输出:1
print(name_list[-5]) # 输出:1
python
# 案例
name_list = [['1','sadas'],[True,'4','5']] # 嵌套多个列表
print(name_list[0][0]) # 输出:1
print(name_list[1][0]) # 输出:True
2.3. 修改索引元素
语法:列表[下标] = 值
python
# 案例
my_list = ["python","wl","1"]
my_list[2] = 2 # 正向下标
print(f"修改后my_list值: {my_list}") # 输出:['python', 'wl', 2]
my_list[-1] = -1 # 正向下标
print(f"修改后my_list值: {my_list}") # 输出:['python', 'wl', -1]
2.4. 插入列表元素
语法:列表.insert(下标,元素) ,指定索引位置插入
python
# 案例
my_list = ["python","wl","1"]
my_list.insert(0,"888")
print(f"插入一个数888后:{my_list}") # 输出:['888', 'python', 'wl', '1']
2.5. 追加元素
语法:列表.append(元素), 追加到尾部
python
# 案例
my_list = ["python","wl","1"]
my_list.append("999") # 也可以追加新列表 my_list.append([555,222])
print(f"最后追加元素999:{my_list}") # 输出:['python', 'wl', '1', '999']
2.6. 删除元素
语法1: del 列表[下标] del 仅仅完成删除
python
# 案例
my_list = ["python","wl","1"] # 语法1
del my_list[0] # 注意括号,del 仅仅完成删除
print(f"删除第一个python: {my_list}") # 输出:['wl', '1']
语法2: 列表.pop(下标) 不仅删除元素,还可以返回值得到它
python
#案例
my_list = ["python","wl","1"] # 语法2
my_pop = my_list.pop(0) # 注意括号,pop不仅删除,还可以返回值得到它
print(f"删除第一个python: {my_list},删除的是 {my_pop}") # 输出:['wl', '1'],删除的是 python
语法3: 列表.remove(元素) 删除某一个元素,从前往后第一个删除
python
# 案例
my_list = ["python","python","wl","1"] # 语法3
my_list.remove('python') # 只删除第一个
print(f"删除第一个python: {my_list}") # 输出:['python', 'wl', '1']
2.7. 清空元素
语法: 列表.clear()
python
# 案例
my_list = ["python","wl","1"]
my_list.clear()
print(f"全部清空列表,结果是:{my_list}") # 输出:[]
2.8. 统计某个元素
语法: 列表.count()
python
# 案例
my_list = [1,2,2,1,3,4]
count = my_list.count(1)
print(f"列表1的数量是:{count}") # 输出:2
2.9. 统计所有元素
语法:len(列表)
python
# 案例
my_list = ["python","wl","1"]
print(len(my_list)) # 输出:3
3. 列表的遍历
3.1. 利用while循环获取元素
解释:1.自定循环条件,自行控制 2.通过条件控制做到无限循环
python
# 案例 依次取出列表元素
my_list = ["python","wl","1"]
print(type(my_list))
index = 0
while index < len(my_list): # len 表示列表中总数小于0,进行循环
a = my_list[index]
print(f"列表的 {index}元素:{a}")
index += 1 # index = index + 1
3.2. 利用for循环获取元素
解释:1.不可以自定循环条件,只能从容器里取出数据 2.理论不可以无限循环
python
# 案例 依次取出列表元素
my_list = ["python",3,4,5]
for a in my_list:
print(f"列表的元素:{a}")
3.3. 利用pandas制作表格,并存储
python
# 案例
import pandas as pd
list = [{'mtime': '2022-12-05', 'title': '国家卫健委', 'digest': '全国累计报告接种新冠病毒疫苗344429.5万剂次'}, {'mtime': '2022-12-05', 'title': '5日0---12时重庆', 'digest': '新增本土确诊病例73例和本土无症状感染者919例'}]
data = pd.DataFrame(list)
print(data)
# 输出:
# mtime title digest
# 0 2022-12-05 国家卫健委 全国累计报告接种新冠病毒疫苗344429.5万剂次
# 1 2022-12-05 5日0---12时 重庆 新增本土确诊病例73例和本土无症状感染者919例
# 存入数据,utf-8-sig编码防止中文乱码
data.to_csv("sj1.csv",encoding="utf-8-sig")
3.4. 使用for循环依次打印数据
python
# 案例
list = [{'mtime': '2022-12-05', 'title': '国家卫健委', 'digest': '全国累计报告接种新冠病毒疫苗344429.5万剂次'}, {'mtime': '2022-12-05', 'title': '5日0---12时重庆', 'digest': '新增本土确诊病例73例和本土无症状感染者919例'}]
for item in list:
mtime = item["mtime"]
title = item["title"]
digest = item["digest"]
print(f"{mtime}, {title}, {digest}")
# 输出:
# 2022-12-05, 国家卫健委, 全国累计报告接种新冠病毒疫苗344429.5万剂次
# 2022-12-05, 5日0---12时重庆, 新增本土确诊病例73例和本土无症状感染者919例
3.5. 使用while循环依次打印数据
python
# 案例
list = [{'mtime': '2022-12-05', 'title': '国家卫健委', 'digest': '全国累计报告接种新冠病毒疫苗344429.5万剂次'}, {'mtime': '2022-12-05', 'title': '5日0---12时重庆', 'digest': '新增本土确诊病例73例和本土无症状感染者919例'}]
x = 0
while x < len(list):
mtime = list[x]["mtime"]
title = list[x]["title"]
digest = list[x]["digest"]
print(f"{mtime}, {title},{digest}")
x += 1
# 输出:
# 2022-12-05, 国家卫健委, 全国累计报告接种新冠病毒疫苗344429.5万剂次
# 2022-12-05, 5日0---12时重庆, 新增本土确诊病例73例和本土无症状感染者919例
三、数据容器-元祖(tuple)
解释:存放数据,不可修改(只读方式),但可以修改元素内容;
python
语法:(元素1,元素2,...)
1. 元祖的创建
python
# 案例
my1_tuple = ("python","wl","1")
my2_tuple = () # 空元祖方式1
my3_tuple = tuple() # 空元祖方式2
my4_tuple = ("python",) # 注意:定义一个元祖,需要加,否则就成了字符串类型
my5_tuple = (["python","wl"],"1") # 注意:元祖里的列表可以删除,修改等
print(f"my1_tuple类型是: {type(my1_tuple)},内容是:{my1_tuple}")
print(f"my2_tuple类型是: {type(my2_tuple)},内容是:{my2_tuple}")
print(f"my3_tuple类型是: {type(my3_tuple)},内容是:{my3_tuple}")
print(f"my4_tuple类型是: {type(my4_tuple)},内容是:{my4_tuple}")
print(f"my5_tuple类型是: {type(my5_tuple)},内容是:{my5_tuple}")
my5_tuple[0][1] = "修改内容"
print(f"修改的内容后:{my5_tuple}") # 输出:(['python', '修改内容'], '1')
del my5_tuple[0][0] # 删除元祖中的列表值
print(f"删除元祖中列表第一个值:{my5_tuple}") # 输出:(['wl'], '1')
2. 元祖的方法
2.1. 元祖-获取元素
python
# 案例
my_tuple = ((1,2,3),(7,8,9)) # 元祖支持嵌套
print(f"my_tuple取出9的数据: {my_tuple[1][2]}") # 输出9
2.2. 元祖-查询元素
语法: 元祖.index
python
# 案例
my_tuple = ('python','wl',1,'python')
print(my_tuple.index('python')) # 输出:0
2.3. 元祖-统计某个元素
语法: 元祖.count
python
# 案例
my_tuple = ('python','wl',1,'python')
print(my_tuple.count('python')) # 输出:2
2.4. 统计-统计所有元素
语法: 元祖.count
python
# 案例
my_tuple = ('python','wl',1,'python')
print(len(my_tuple)) # 输出:4
3. 元祖的遍历
3.1. 利用while循环获取元素
解释:1.自定循环条件,自行控制 2.通过条件控制做到无限循环
python
# 案例 依次取出元祖元素
my_tuple = ("python","wl","1")
print(type(my_tuple))
index = 0
while index < len(my_tuple): # len 表示列表中总数小于0,进行循环
a = my_tuple[index]
print(f"元祖的 {index}元素:{a}")
index += 1 # index = index + 1
3.2. 利用for循环获取元素
解释:1.不可以自定循环条件,只能从容器里取出数据 2.理论不可以无限循环
python
# 案例 依次取出元祖元素
my_tuple = ("python",3,4,5)
print(type(my_tuple))
for a in my_tuple:
print(f"元祖的元素:{a}")
四、数据容器-字符串(str)
特点:不支持修改
1. 字符串的方法
1.1. 字符串-索引获取元素
注意:空格也算一个字符
python
# 案例
my_str = "i is wl"
v1 = my_str[0]
v2 = my_str[-1]
print(f"首个值v1:{v1},最后值v2:{v2}") # 输出:v1:i, v2:c
1.2. 字符串-查找元素
语法:字符串.index(值)
python
# 案例
my_str = "i is wl"
v = my_str.index("is")
print(f"and的起始下标v:{v}") # 输出:2
1.3. 字符串-替换元素
语法:字符串.replace(原值,现值)
python
# 案例
my_str = "i is wl"
v = my_str.replace("i","t")
print(f"把所有的i替换成t:{v}") # 输出:t ts wl
1.4. 字符串-分割元素
语法:字符串.split(分割值)
python
# 案例
my_str = "i is wl"
v = my_str.split( ) # 空格切分
print(f"用空格风格my_str:{v}") # 输出:['i', 'is', 'wl']
1.5. 字符串-规整元素
语法:字符串.strip(去除值) ,空代表去除前后空格
python
# 案例
my_str = "12i is wl21"
v = my_str.strip("12") # 去除12,实际去除"1"和"2"
print(f"去掉12后my_str:{v}") # 输出:i is wl
1.6. 字符串-统计某个元素
语法:字符串count(统计值)
python
#案例
my_str = "i is wl"
v = my_str.count("i")
print(f"i出现的次数:{v}") # 输出:2
1.7. 字符串-统计所有元素
语法:字符串len()
python
#案例
my_str = "i is wl"
v = len(my_str)
print(f"my_str总数长度是:{v}") # 输出:8
五、数据容器-集合{set}
特点:相比其他,不支持重复集合,自带去重,并且输出是无序的
python
语法 : 变量 = {元素1,元素2....}
1. 集合的创建
python
#案例
my_set = {"python","wl",4,"wl"}
print(my_set) # 输出:{'python', 4, 'wl'},故是无序的,不支持下标
2. 集合的方法
2.1. 集合-增加元素
python
# 案例
my_set = {"python","wl",4,"wl"}
my_set.add("Python") # 如果增加相同数据等于没有写
print(f"增加一个数my_set结果是:{my_set}") # 输出:{'wl', 'Python', 'python', 4}
2.2. 集合-移除元素
python
# 案例
my_set = {"python","wl",4,"wl"}
my_set.remove("python") # 删除所有,再去重
print(f"移除一个数my_set结果是:{my_set}") # 输出:{'wl', 4}
2.3. 集合-随机取出元素
python
# 案例
my_set = {"python","wl",4,"wl"}
element = my_set.pop() # 随机取,无法指定
print(f"{element}") #
print(f"随机取一个数my_set结果是:{my_set}") #
2.4. 集合-清空元素
python
# 案例
my_set = {"python","wl",4,"wl"}
my_set.clear()
print(f"清空my_set结果是:{my_set}") # 输出:set()
2.5. 集合-取(消除)两个集合的差
python
# 案例
set1 = {1,2,3}
set2 = {2,3,4}
f_set = set1.difference(set2)
print(f"除set1中有而set2没有的结果是:{f_set}") # 输出:{1}
set1.difference_update(set2) # 消除差集,集合2不变化
print(set1) # 输出:{1}
print(set2) # 输出:{2, 3, 4}
2.6. 集合-合并元素
python
# 案例
set1 = {1,2,3}
set2 = {2,3,4}
set3 = set1.union(set2)
print(f"集合合并后set3:{set3}") # 输出:(去重):{1, 2, 3, 4}
2.7. 集合-统计元素数量(去重)
python
# 案例
set1 = {1,2,3,2,3,4}
num = len(set1)
print(f"集合合并后set3:{num}") # 输出(去重):4
3. 集合的遍历
说明:因为不支持下标索引,所以while循环不支持,支持for循环
python
# 案例
set1 = {1,2,3,2,3,4}
for a in set1:
print(f"集合元素有:{a}")
六、数据容器-字典{dict}
解释:字和其相关联的含义
注意:字典可以任意类型,不允许重复,会覆盖
python
语法: 变量 = {key:value,key:value.....}
1. 字典的创建
python
# 案例
my_dict = {"张三":99,"李四":98,"王五":90}
print(f"my_dict类型是:{type(my_dict)},内容是:{my_dict}") # 输出:<class 'dict'>
2. 字典的方法
2.1. 字典-key取值
python
# 案例
my_dict = {"张三":99,"李四":98,"王五":90}
s = my_dict['张三']
print(f"张三对应的值是:{s}") # 输出:99
2.2. 字典-嵌套取值
python
# 案例
my_dict = {
"张三":{
"语文":99,"数学":70
},"李四":{
"语文":88,"数学":80
},"王五":{
"语文":80,"数学":68
}
}
s = my_dict["王五"]["数学"]
print(f"王五对应的数学值是:{s}") # 输出:68
2.3. 字典-新增元素
python
# 案例
my_dict = {"张三":99,"李四":98,"王五":90}
my_dict['赵六'] = 77
print(f"新增赵六成绩后:{my_dict}")
2.4. 字典-更新元素
python
# 案例
my_dict = {"张三":99,"李四":98,"王五":90}
my_dict['张三'] = 77
print(f"新增赵六成绩后:{my_dict}")
2.5. 字典-删除元素
python
# 案例
my_dict = {"张三":99,"李四":98,"王五":90}
my_dict.pop("张三")
print(f"删除张三后:{my_dict}")
2.6. 字典-清空元素
python
# 案例
my_dict = {"张三":99,"李四":98,"王五":90}
my_dict.clear()
print(f"清空后:{my_dict}")
2.7. 字典-取key、value值
python
# 案例
my_dict = {"张三":99,"李四":98,"王五":90}
s = my_dict.keys()
print(f"{s}")
for s in my_dict: # for循环输出value值,不支持while循环
print(f"{my_dict[s]}")
2.8. 字典-统计所有元素
python
# 案例
my_dict = {"张三":99,"李四":98,"王五":90}
num = len(my_dict)
print(f"数量是:{num}") # 输出:3
3. 字典的综合案例
要求:对名次为3的语文增加10分,并晋升一名次
python
# 案例
my_dict = {
"张三":{
"名次":8,
"语文":99,
"数学":70
},"李四":{
"名次":10,
"语文":88,
"数学":80
},"王五":{
"名次":3,
"语文":80,
"数学":68
}
}
print(f"升级之前是:{my_dict}")
for name in my_dict:
if my_dict[name]["名次"] == 3: # 当名次为3时,
my_dict[name]["名次"] = 2 # 晋升一名次,改为2,
my_dict[name]["语文"] += 10 # 语文成绩+10分
print(f"升级之后是:{my_dict}")
七、数据容器的切片
解释:从一个序列中,取出子序列
语法:序列[起始下标:结束下标:步长] 步长1表示,一个个取;2表示间隔一个取
1. 列表list
python
# 案例
my_list = [0,1,2,3,4,5,6,7,8,9]
result_1 = my_list[1:3] # 步长默认是1,可以不写
print(f"从第二个到四个取,result_1结果是:{result_1}")
2. 元祖tuple
python
# 案例
my_tuple = (0,1,2,3,4,5,6,7,8,9)
result_2 = my_tuple[::2] # 空代表从头到尾,2代表步长
print(f"从头到尾,间隔1,result_2结果是:{result_2}")
3. 字符串
python
# 案例
my_str = "0123456789"
result_3 = my_str[::-2]
print(f"从尾到头,间隔1,result_3结果是:{result_3}")
python
# 案例 正常取出数 "我是你哥"
my_str = "哥大我叫请,啊哥你是我,好你"
s1 = my_str[::-1][3:7] # 先倒转,再取值。注意最后的下标索引
print(f"方式s1结果是:{s1}")
s2 = my_str[7:11][::-1] # 先取值,再倒转。注意最后的下标索引
print(f"方式s2结果是:{s2}")
s3 = my_str.split(",")[1].replace("啊","")[::-1] # 先用,分割取值第二个再把"啊"替换掉 最后倒序
print(f"方式s3结果是:{s3}")
八、数据容器的通用操作(排序、转换)
python
# 案例
my_list = [1,2,3,4,5]
my_tuple = (1,2,3,4,5)
my_str = "abcdefgh"
my_set = {1,2,3,4,5}
my_dict = {"key1":1,"key2":2,"key3":3}
1. 容器取值(max)
python
print(f"列表 最大元素是:{max(my_list)}")
print(f"元祖 最大元素是:{max(my_tuple)}")
print(f"字符串 最大元素是:{max(my_str)}")
print(f"集合 最大元素是:{max(my_set)}")
print(f"字典 最大元素是:{max(my_dict)}")
2. 容器转列表
python
print(f"列表 转列表是:{list(my_list)}")
print(f"元祖 转列表是:{list(my_tuple)}")
print(f"字符串 转列表是:{list(my_str)}")
print(f"集合 转列表是:{list(my_set)}")
print(f"字典 转列表是:{list(my_dict)}")
3. 容器转元祖
python
print(f"列表 转元祖是:{tuple(my_list)}")
print(f"元祖 转元祖是:{tuple(my_tuple)}")
print(f"字符串 转元祖是:{tuple(my_str)}")
print(f"集合 转元祖是:{tuple(my_set)}")
print(f"字典 转元祖是:{tuple(my_dict)}")
4. 容器转字符串、集合
解释:字典dict不支持,缺少键值对;字符串、集合都是无序)
5. 容器的排序
5.1. 排序
语法:sorted(容器,reverse=False)
python
print(f"列表 排序是:{sorted(my_list)}")
print(f"元祖 排序是:{sorted(my_tuple)}")
print(f"字符串 排序是:{sorted(my_str)}")
print(f"集合 排序是:{sorted(my_set)}")
print(f"字典 排序是:{sorted(my_dict)}")
5.2. 降序
python
print(f"列表 排序是:{sorted(my_list,reverse=True)}")
print(f"元祖 排序是:{sorted(my_tuple,reverse=True)}")
print(f"字符串 排序是:{sorted(my_str,reverse=True)}")
print(f"集合 排序是:{sorted(my_set,reverse=True)}")
print(f"字典 排序是:{sorted(my_dict,reverse=True)}")
5.3. 根据数字下标定义排序方法 sort
python
my_list = [["a",67],["a",7],["a",52]]
# 方式1
def sort_key(element):
return element[1]
my_list.sort(key=sort_key,reverse=False) # True/flase:表示升序降序
# 方式2 利用匿名函数lambda
my_list.sort(key=lambda element:element[1],reverse=False)
print(my_list)