传送门==>B站黑马python入门教程
目录
1.集合
1.1 集合
目前接触了列表,元组,字符串这几个数据容器,基本满足大部分的需求;
为什么需要学习心得集合类型?
- 列表可以修改,支持重复元素且有序;
- 元组,字符串不可修改,支持重复元素且有序;
局限在于:这几个都支持存入重复元素,
若是需要对内容做去重处理,列表,元组,字符串就不方便;
集合的主要特定是 不支持元组的重复(自带去重功能),且内容无序;
集合的基本语法
bash
# 定义集合字面量
{元素,元素,元素,.....}
#定义集合变量
变量名 = {元素,元素....}
#定义空集合
变量名 = set()
与列表,元组,字符串等定义基本相同:
- 列表使用:[]
- 元组使用:()
- 字符串使用:""
- 集合使用:{}
定义集合练习
python
# 定义集合
set_demo = {1,2,3,4,5,6,7,8,9,10}
print(f"集合元素为:{set_demo}")
set_empty = set()
print(f"空集合元素为:{set_empty}")
1.添加新元素
集合.add(元素)
集合.update(容器)
python
set_demo = {1,2,3,4,5,6,7,8,9,10}
set_demo.add(11)
print(f"添加元素11后的集合元素为:{set_demo}")
# 添加列表;
set_demo.update([1,12,13,14,15])
# 添加元组;
set_demo.update((1,124,13,14,15))
# 由于集合不支持重复元素,所以添加重复元素,集合会自动去重;
print(f"添加元素12-15,124后的集合元素为:{set_demo}")

- 删除元素
集合.remove(元素)--删除指定元素
集合.discard(元素)--删除指定元素
集合.clear() -- 清空集合
python
set_demo = {1,2,3,4,5,6,7,8,9,10}
# 删除元素1;
set_demo.remove(1)
print(f"删除元素1后的集合元素为:{set_demo}")
# 删除元素2;
set_demo.discard(2)
print(f"删除元素2后的集合元素为:{set_demo}")
# 删除集合中所有元素;
set_demo.clear()
print(f"清空集合后的集合元素为:{set_demo}")

3.随机取出一个元素
集合.pop()
python
set_demo = {1,2,3,4,5,6,7,8,9,10}
set_demo.pop()
print(f"随机取出一个元素后集合变为:{set_demo}")

4.取两个集合的差集;
集合1.difference(集合2)
python
set_demo1 = {1,2,3}
set_demo2 = {1,5,6}
set_demo3 = set_demo1.difference(set_demo2)
print(f"取两个集合的差集后:{set_demo3}")
print(f"取出差集后 set_demo1{set_demo1}")
print(f"取出差集后 set_demo2{set_demo2}")

5.消除两个集合的差集;即获取两个集合的交集
集合.intersection(集合2)
python
# 5.消除两个集合的差集;即获取两个集合的交集;
set_demo = {1,2,3,4,5,6,7,8,9,10}
set_demo1 = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}
print(f"两个集合的交集为:{set_demo.intersection(set_demo1)}")

6.两个集合合并为一个集合;
集合.intersection(集合2)
python
set_demo = {1,2,3,4,5,6,7,8,9,10}
set_demo1 = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}
print(f"两个集合的并集为:{set_demo.intersection(set_demo1)}")
print(f"两个集合的并集为:{set_demo | set_demo1}")

- 集合的遍历
python
set_demo = {1,2,3,4,5,6,7,8,9,10}
for i in set_demo:
print(f"集合的元素为{i}")

1.2 集合的练习
集合案例练习
对于一个存在重复元素的列表进行去重
- 定义空集合
- for循环遍历列表
- 在for循环中将列表的元素添加到集合
- 最终得到元素去重之后的集合对象,输出
python
# 集合案例
list =["sqweq",False,True,False,23,23,22,1,2,3,"asdq"]
# 定义空集合
set_demo = set()
# for循环遍历列表
for i in list:
set_demo.add(i)
# 最终得到元素去重之后的集合对象,输出
print(set_demo)

2.字典
2.1.字典
字典也是使用{},但是存储的元素是成对出现的,键值对
python
# 定义字典的字面量
{key:value,key:value,...key:value}
# 定义字典变量
字典名 = {key:value,key:value,...key:value}
# 定义空字典
字典名 = {}
字典名 = dict()
字典的特点
- 可容纳多个数据
- 可容纳不同类型的数据
- 每一份数据时key-value键值对形式
- 可以用key获取value,key不可重复
- 不支持下标索引
- 可以修改(增加/删除/更新元素)
- 支持for循环,不支持while循环
python
# 定义字典
dict1 = {"name":"张三","age":18,"sex":"男"}
print(f"字典为:{dict1}",type(dict1))
# 定义空字典
dict1 = {}
print(f"空字典为:{dict1}",type(dict1))
dict1 = dict()
print(f"空字典为:{dict1}",type(dict1))

定义重复key的字典
后面的会覆盖前面的value值
python
# 定义重复key的字典
dict1 = {"name":"张三","name":"lisi"}
print(f"重复key的字典为:{dict1}")
print(f"字典的元素个数为:{len(dict1)}")

从字典中基于key获取value
语法:
字典[key]
python
dict1 = {"name":"张三","age":18,"sex":"男"}
print(f"字典中name对应的value为:{dict1['name']}")
print(f"字典中age对应的value为:{dict1['age']}")
print(f"字典中sex对应的value为:{dict1['sex']}")

字典的嵌套
字典的key和value可以是任意数据类型(key不可作为字典)
那么,表名字典是可以嵌套的
练习:记录学生各科的考试信息;
python
student_dict = {
"张三":{
"语文":90,
"数学":80,
"英语":70
},
"lisi":{
"语文":80,
"数学":90,
"英语":100
}
}
print(f"张三的语文成绩为:{student_dict['张三']['语文']}")

2.2.字典的操作方法
1.新增元素 - 字典[key] = value
python
dict_demo = {"name":"张三","age":18,"sex":"男"}
dict_demo["phone"] = "12345678901"
print(f"新增元素后的字典为:{dict_demo}")
2.修改元素 - 旧字典[key]= value
python
dict_demo = {"name":"张三","age":18,"sex":"男"}
dict_demo["name"] = "张三1"
print(f"修改元素后的字典为:{dict_demo}")

3.删除元素 字典.pop(key)
删除字典中指定的元素,返回被删除的元素值;
python
# 3.删除元素 字典.pop(key)
# 删除字典中指定的元素,返回被删除的元素值;
dict_demo = {"name":"张三","age":18,"sex":"男"}
dict_demo.pop('name')
print(f"删除字典中name元素后的字典为:{dict_demo}")
4.清空字典 - 字典.clear()
python
# 4.清空字典 - 字典.clear()
dict_demo = {"name":"张三","age":18,"sex":"男"}
dict_demo.clear()
print(f"清空字典后的字典为:{dict_demo}")

5.获取全部的key - 字典.keys()
python
# 5.获取全部的key - 字典.keys()
# 得到字典中的全部key;
dict_demo = {"name":"张三","age":18,"sex":"男"}
print(f"字典的key为:{dict_demo.keys()}")

6.遍历字典
python
#
dict_demo = {"name":"张三","age":18,"sex":"男"}
for key in dict_demo.keys():
print(f"字典的key为:{key}")
print(f"字典的value为:{dict_demo[key]}")

- 统计字典内的元素数量 -
len(字典)
python
7. 统计字典内的元素数量;
dict_demo = {"name":"张三","age":18,"sex":"男"}
print(f"字典的元素数量为:{len(dict_demo)}")

2.3.字典练习
有如下员工信息,请使用字典完成数据的记录,
通过for循环,对所有级别为1级的员工,级别上升1级,薪水增加1000元;
姓名:张三-部门:研发部-工资:10000-级别:1
姓名:李四-部门:采购部-工资:8000-级别:1
姓名:王五-部门:研发部-工资:15000-级别:2
姓名:孙六-部门:销售部-工资:10000-级别:1
python
dict_demo = {
"张三":{"部门":"研发部","工资":10000,"级别":1},
"李四":{"部门":"采购部","工资":8000,"级别":1},
"王五":{"部门":"研发部","工资":15000,"级别":2},
"孙六":{"部门":"销售部","工资":10000,"级别":1}
}
for name in dict_demo:
if dict_demo[name]["级别"] == 1:
dict_demo[name]["级别"] += 1
dict_demo[name]["工资"] += 1000
print(dict_demo)

3.数据容器总结
数据容器可以从这些角度进行简单分类
- 是否支持下标索引
- 支持:列表,元组,字符串 --序列类型
- 不支持:集合,字典 -- 非序列类型
- 是否支持重复元素:
- 支持:列表,元组,字符串 -- 序列类型
- 不支持:集合,字典 -- 非序列类型
- 是否可以修改
- 支持:列表,集合,字典
- 不支持:元组,字符串

基于数据容器的特点,可用于不同的应用场景;
- 列表:一批数据,可修改可重复出现的存储;
- 元组:一批数据,不可修改,但是可重复的存储;
- 字符串:一批数据,不可修改,可重复的存储;
- 集合:一批数据,去重存储场景;
- 字典:一批数据,可用key检索value的存储;
数据容器的通用操作
数据容器尽管各自有不同的特点,但是也有通用操作
遍历:
- 数据容器都支持for循环遍历
- 列表,元组,字符串支持while循环,集合,字典不支持(无下标索引)
其他方法

python
list = [1,2,3,4,5,6,7,8,9,10]
tuple = (1,2,3,4,5,6,7,8,9,10)
str = "hello world"
set = {1,2,3,4,5,6,7,8,9,10}
dict = {"name":"张三","age":18,"sex":"男"}
# len 元素个数
print(f"列表元素个数:{len(list)}")
print(f"元组元素个数:{len(tuple)}")
print(f"字符串元素个数:{len(str)}")
print(f"集合元素个数:{len(set)}")
print(f"字典元素个数:{len(dict)}")
# max 最大元素
print(f"列表最大元素:{max(list)}")
print(f"元组最大元素:{max(tuple)}")
print(f"字符串最大元素:{max(str)}")
print(f"集合最大元素:{max(set)}")
print(f"字典最大元素:{max(dict)}")
# min 最小元素
print(f"列表最小元素:{min(list)}")
print(f"元组最小元素:{min(tuple)}")
print(f"字符串最小元素:{min(str)}")
print(f"集合最小元素:{min(set)}")
print(f"字典最小元素:{min(dict)}")

容器相互转换
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)}")
# 容器转元组
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)}")
# 容器转字符串
print(f"列表转字符串:{str(my_list)}")
print(f"元组转字符串:{str(my_tuple)}")
print(f"字符串转字符串:{str(my_str)}")
print(f"集合转字符串:{str(my_set)}")
print(f"字典转字符串:{str(my_dict)}")
# 容器转集合
print(f"列表转集合:{set(my_list)}")
print(f"元组转集合:{set(my_tuple)}")
print(f"字符串转集合:{set(my_str)}")
print(f"集合转集合:{set(my_set)}")
print(f"字典转集合:{set(my_dict)}")

通用排序sorted(容器, boolean reverse)
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)}")



python
# 演示字符串的大小
# abc 比较 abd
print(f"'abc' > 'abd':{ 'abc' > 'abd'}")
# A比较 a
print(f"'A' > 'a':{ 'A' > 'a'}")
#ab 比较 a
print(f"'ab' > 'a':{ 'ab' > 'a'}")
# key1比较key2
print(f"'key1' > 'key2':{ 'key1' > 'key2'}")
