Python学习笔记(7)--集合,字典,数据容器总结

传送门==>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}")
  1. 删除元素
    集合.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}")
  1. 集合的遍历
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]}")
  1. 统计字典内的元素数量 - 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'}")

相关推荐
沃斯堡&蓝鸟2 小时前
DAY 29 异常处理
python
Direction_Wind2 小时前
抓包的使用与讲解
python
职业码农NO.12 小时前
智能体推理范式: Plan-and-Execute(规划与执行)
人工智能·python·数据分析·系统架构·知识图谱·agent·集成学习
爱笑的眼睛112 小时前
超越`cross_val_score`:深入剖析Scikit-learn交叉验证API的设计哲学与高阶实践
java·人工智能·python·ai
呵呵哒( ̄▽ ̄)"2 小时前
专项智能练习(古代神话)
学习
map_vis_3d2 小时前
JSAPIThree 加载单体三维模型学习笔记:SimpleModel 简易加载方式
笔记·学习·3d
专注于大数据技术栈3 小时前
java学习--String和StringBuffer互转
java·学习
Ven%3 小时前
【AI大模型算法工程师面试题解析与技术思考】
人工智能·python·算法
天勤量化大唯粉3 小时前
枢轴点反转策略在铜期货中的量化应用指南(附天勤量化代码)
ide·python·算法·机器学习·github·开源软件·程序员创富