Python学习从0到1 day13 Python数据容器.4.set集合、dict字典,映射

news2024/11/15 3:28:24

他往黑夜里去了,我陪他 

                       ——24.2.4

一、set集合

1.为什么使用集合?

通过特性来分析:

        列表可修改、支持重复元素且有序

        元组、字符串不可修改、支持重复元素且有序

        局限在于:它们都支持重复元素

当场景需要对内容进行去重处理,列表、元组、字符串就不方便了

而集合最主要的特点是不支持重复元素(自带去重功能),并且内容无序

2.集合的定义

基本语法:

# 定义集合字面量

{元素,元素,……元素}

# 定义集合变量

变量名称 = {元素,元素,……元素}

# 定义空集合

变量名称 = set()

和列表、元组、字符串等定义基本相同

        列表使用:[]

        元组使用:()

        字符串使用:""

        集合使用:{}

#定义集合
my_set = {"一切都会好的","万事胜意","未来可期","我一直相信","一切都会好的","万事胜意","未来可期","我一直相信"}
my_set_empty = set()    #定义空集合
print(f"my_set的内容是:{my_set},类型是:{type(my_set)}")
print(f"my_set的内容是:{my_set_empty},类型是:{type(my_set_empty)}")

3.集合的使用

集合的常用操作——修改

首先,因为集合是无序的,所以集合不支持:下标索引访问

但是集合和列表一样,是允许修改的,集合的修改方法如下:

①添加新元素

   语法:集合.add(元素)

   功能:将指定元素,添加到集合内

   结果:集合本身被修改,添加了新元素

#添加新元素
my_set = {"一切都会好的","万事胜意","未来可期","我一直相信","一切都会好的","万事胜意","未来可期","我一直相信"}
my_set.add("苦难是花开的伏笔")
print(f"my_set添加元素后的结果是{my_set}")

②移除元素

   语法:集合.remove(元素)

   功能:将指定元素,从集合内删除

   结果:集合本身被修改,移除了元素

#移除指定元素
my_set = {"一切都会好的","万事胜意","未来可期","我一直相信","一切都会好的","万事胜意","未来可期","我一直相信"}
my_set.remove("未来可期")
print(f"my_set删除元素万事胜意后的结果是:{my_set}")

③从集合中随机取出元素

   语法:集合.pop()

   功能:从集合中随机取出一个元素

   结果:会得到一个元素的结果。同时集合本身被修改,元素被移除

#随机取出一个元素
my_set = {"一切都会好的","万事胜意","未来可期"}
element = my_set.pop()
print(f"集合被取出元素是:{element},取出元素后的集合是:{my_set}")

④清空集合

   语法:集合.clear()

   功能:清空集合

   结果:集合本身被清空

#清空集合,clear
my_set = {"一切都会好的","万事胜意","未来可期","我一直相信","一切都会好的","万事胜意","未来可期","我一直相信"}
my_set.clear()
print(f"集合被清空后的结果是:{my_set}")

⑤求出2个集合的差集

   语法:集合1.difference(集合2)

   功能:取出集合1和集合2的差集(集合1有而集合2没有的)

   结果:得到一个新集合,集合1和集合2不变

#取出2个集合的差集
my_set1 = {"一切都会好的","万事胜意","未来可期"}
my_set2 = {"一切都会好的","万事胜意","未来可期","我一直相信","苦难是花开的伏笔"}
my_set3 = my_set2.difference(my_set1)
print(f"集合2有而集合1没有的元素是:{my_set3}")

⑥消除2个集合的差集

   语法:集合1.difference_update(集合2)

   功能:对比集合1和集合2,在集合1内,删除和集合2相同的元素

   结果:集合1被修改,集合2不变

#消除两个集合的差集
my_set1 = {"一切都会好的","万事胜意","未来可期"}
my_set2 = {"一切都会好的","万事胜意","我一直相信","苦难是花开的伏笔"}
my_set1.difference_update(my_set2)
print(f"集合2是:{my_set2}")
print(f"集合1是:{my_set1}")

⑦两个集合合并

   语法:集合1.union(集合2)

   功能:将集合1和集合2组合成新集合

   结果:得到新集合,集合1和集合2不变

#两个集合合并成一个集合
set1 = {1,2,3,4,7}
set2 = {2,5,6,7,8}
set3 = set1.union(set2)
print(f"集合1是:{set1}")
print(f"集合2是:{set2}")
print(f"集合3是:{set3}")

⑧统计集合中的元素数量

   语法:len(集合名)

   功能:统计集合中有几个元素

   结果:得到集合中的元素个数

#统计集合中的元素数量len()
my_set = {"一切都会好的","万事胜意","我一直相信","苦难是花开的伏笔"}
num = len(my_set)
print(f"my_set中共有:{num}个元素")

⑨集合的遍历

   集合不支持下标索引,所以不能使用while循环

   但是可以使用for循环

#集合的遍历,for循环
set1 = {1,2,3,4,7}
for i in set1:
    print(f"集合中的元素有{i}")

⑩总结

# 演示数据容器集合的使用

#定义集合
my_set = {"一切都会好的","万事胜意","未来可期","我一直相信","一切都会好的","万事胜意","未来可期","我一直相信"}
my_set_empty = set()    #定义空集合
print(f"my_set的内容是:{my_set},类型是:{type(my_set)}")
print(f"my_set的内容是:{my_set_empty},类型是:{type(my_set_empty)}")

#添加新元素
my_set = {"一切都会好的","万事胜意","未来可期","我一直相信","一切都会好的","万事胜意","未来可期","我一直相信"}
my_set.add("苦难是花开的伏笔")
print(f"my_set添加元素后的结果是:{my_set}")

#移除指定元素
my_set = {"一切都会好的","万事胜意","未来可期","我一直相信","一切都会好的","万事胜意","未来可期","我一直相信"}
my_set.remove("未来可期")
print(f"my_set删除元素万事胜意后的结果是:{my_set}")

#随机取出一个元素
my_set = {"一切都会好的","万事胜意","未来可期"}
element = my_set.pop()
print(f"集合被取出元素是:{element},取出元素后的集合是:{my_set}")

#清空集合,clear
my_set = {"一切都会好的","万事胜意","未来可期","我一直相信","一切都会好的","万事胜意","未来可期","我一直相信"}
my_set.clear()
print(f"集合被清空后的结果是:{my_set}")

#取出2个集合的差集
my_set1 = {"一切都会好的","万事胜意","未来可期"}
my_set2 = {"一切都会好的","万事胜意","未来可期","我一直相信","苦难是花开的伏笔"}
my_set3 = my_set2.difference(my_set1)
print(f"集合2有而集合1没有的元素是:{my_set3}")

#消除两个集合的差集
my_set1 = {"一切都会好的","万事胜意","未来可期"}
my_set2 = {"一切都会好的","万事胜意","我一直相信","苦难是花开的伏笔"}
my_set1.difference_update(my_set2)
print(f"集合2是:{my_set2}")
print(f"集合1是:{my_set1}")

#两个集合合并成一个集合
set1 = {1,2,3,4,7}
set2 = {2,5,6,7,8}
set3 = set1.union(set2)
print(f"集合1是:{set1}")
print(f"集合2是:{set2}")
print(f"集合3是:{set3}")

#统计集合中的元素数量len()
my_set = {"一切都会好的","万事胜意","我一直相信","苦难是花开的伏笔"}
num = len(my_set)
print(f"my_set中共有:{num}个元素")

#集合的遍历,for循环
set1 = {1,2,3,4,7}
for i in set1:
    print(f"集合中的元素有{i}")

4.集合的特点

①可以容纳多个数据

②可以容纳不同类型的数据(混装)

③数据是无序存储的(不支持下标索引)

④不允许重复数据存在

⑤可以修改(增加或删除元素等)

⑥支持for循环

5.练习——信息去重

有如下列表对象:

my_list = ["一切都会好的","万事胜意","未来可期","我一直相信","一切都会好的","万事胜意","未来可期","我一直相信","苦难是花开的伏笔","一切都会好的","我一直相信"]

要求:

        ①定义一个空集合

        ②通过for循环遍历列表

        ③在for循环中将列表的元素添加至集合

        ④最终得到元素去重后的集合对象,并打印输出

#定义一个空集合
my_set = set()
#for循环遍历链表
my_list = ["一切都会好的","万事胜意","未来可期","我一直相信","一切都会好的","万事胜意","未来可期","我一直相信","苦难是花开的伏笔","一切都会好的","我一直相信"]
for i in my_list:
    #添加元素到集合内部
    my_set.add(i)
    #最终打印出来
print(f"通过for循环遍历去重后的链表为:{my_set}")

二、dict字典

1.为什么使用字典?

使用字典,可以通过用一个key数据取出对应的value数据的值

2.字典的定义

字典的定义,同样使用{},不过存储的元素是一个个的:键值对,如下语法:

#定义字典字面量

{key:value,key:value,……,key:value}

#定义字典变量

my_dict = {key:value,key:value,……,key:value}

#定义空字典

my_dict = {}              # 空字典定义方式1 

my_dict = dict()        # 空字典定义方式2

# 定义字典
my_dict1 = {"张三":27,"李四":19,"王五":23}

# 定义空字典
my_dict2 = {}
my_dict3 = dict()
print(f"字典1的内容是:{my_dict1},类型:{type(my_dict1)}")
print(f"字典2的内容是:{my_dict2},类型:{type(my_dict2)}")
print(f"字典3的内容是:{my_dict3},类型:{type(my_dict3)}")

# 定义重复key的字典
my_dict4 = {"张三":99,"李四":81,"张三":27}
print(f"重复字典为:{my_dict4}")

3.字典数据的获取

字典同集合一样,不可以使用下标索引

但是字典可以通过key值来取得对应的value

语法:字典[key]可以取到对应的value

# 从字典中基于key获取value
my_dict1 = {"张三":27,"李四":19,"王五":23}
print(my_dict1["张三"])
print(my_dict1["李四"])
print(my_dict1["王五"])
age1 = my_dict1["张三"]
print(f"张三的年纪为:{age1}")

4.字典的嵌套

字典的key和value可以是任意数据类型(key不可为字典)

那么,就表明,字典是可以嵌套的

# 定义嵌套字典
stu_score_dict = {
    "王里宏":{"语文":77,"数学":66,"英语":33},
    "周杰论":{"语文":88,"数学":86,"英语":55},
    "林俊节":{"语文":99,"数学":96,"英语":66}
}
print(f"学生的考试信息为:{stu_score_dict}")

5.从嵌套字典中获取数据

# 定义嵌套字典
stu_score_dict = {
    "王里宏":{"语文":77,"数学":66,"英语":33},
    "周杰论":{"语文":88,"数学":86,"英语":55},
    "林俊节":{"语文":99,"数学":96,"英语":66}
}
print(f"学生的考试信息为:{stu_score_dict}")

# 从嵌套字典中获取数据
score = stu_score_dict["周杰论"]["数学"]
print(f"周杰论的数学信息是:{score}")

6.字典的常用操作

1.新增元素

        语法:字典[key] = value

        结果:字典被修改,新增了元素

#新增元素
my_dict = {"张三":99,"李四":85,"王五":77}
my_dict["小明"] = 67
print(f"字典经过更新元素后的结果是:{my_dict}")

2.更新元素

        语法:字典[key] = value

        结果:字典被修改,元素被更新

        注意:字典key不可以重复,所以对已存在的key执行上述操作,就是更新value的值

#更新元素
my_dict = {"张三":99,"李四":85,"王五":77}
my_dict["张三"] = 87
print(f"字典经过更新元素后的结果是:{my_dict}")

3.删除元素

        语法:字典.pop(key)

        结果:获得指定key的value,同时字典被修改,指定key的数据被删除

#删除元素
my_dict = {"张三":99,"李四":85,"王五":77}
score = my_dict.pop("王五")
print(f"字典中被移除一个元素后结果是:{my_dict},王五的考试分数是:{score}")

4.清空元素

        语法:字典名.clear

#清空元素
my_dict.clear()
print(f"字典被清空后是:{my_dict}")

5.获取全部的key

        语法:字典.keys(),结果:得到字典中的全部key

#获取全部的key
my_dict = {"张三":99,"李四":85,"王五":77}
keys = my_dict.keys()
print(f"字典中的key值有:{keys}")

6.遍历字典

        获取全部的key,通过全部的key对字典进行遍历

        语法: for key in keys/字典名:

#获取全部的key
my_dict = {"张三":99,"李四":85,"王五":77}
keys = my_dict.keys()
print(f"字典中的key值有:{keys}")

#遍历字典
for key in keys:
    print(f"字典的key是{key}")
    print(f"字典的value是{my_dict[key]}")

7.统计字典内的元素数量

        语法:len(字典名)

#统计字典内的元素数量
num = len(my_dict)
print(f"字典内的元素数量是:{num}")

7.字典的特点

①可以容纳多个数据

②可以容纳不同类型的数据

③每一份数据是KeyValue键值对

④可以通过key获取到value,key不可重复(重复会覆盖)

⑤不支持下标索引

⑥可以修改(增加或删除更新元素等)

⑦支持for循环,不支持while循环

8.练习——升职加薪

有如下员工信息,请使用字典完成数据的记录

并通过for循环,对所有级别为1级的员工,级别上升一级,薪水增加1000元

# 演示字典的课后练习,升职加薪,对所有级别为1级的员工,级别上升1级,薪水增加1000元

# 组织字典记录数据
info_dict = {
    "王力鸿":{
        "部门":"科技部",
        "工资":3000,
        "级别":1
    },
    "周杰轮":{
        "部门": "市场部",
        "工资": 5000,
        "级别": 2
    },
    "林俊节":{
        "部门": "市场部",
        "工资": 7000,
        "级别": 3
    },
    "张学油":{
        "部门": "科技部",
        "工资": 4000,
        "级别": 1
    },
    "刘德滑":{
        "部门": "市场部",
        "工资": 6000,
        "级别": 2
    }
}

print(f"员工在升值加薪之前的结果:{info_dict}")

# for循环遍历字典
for i in info_dict:
    #if条件判断符合条件员工
    if info_dict[i]["级别"] == 1:
        #升职加薪操作
        #获取到员工的信息字典
        employee_info_dict = info_dict[i]
        #修改员工信息
        employee_info_dict["级别"] = 2    #级别+1
        employee_info_dict["工资"] += 1000    #工资+1000
        #将员工信息更新回info_dict
        info_dict[i] = employee_info_dict

# 输出结果
print(f"对员工进行升职加薪后的结果是:{info_dict}")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1431066.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微分几何——梅向明第四版学习笔记(一) 向量函数和曲线论

目录 引出向量函数曲线论简单曲线定义曲线的向量参数表示 曲线的切线【重要】曲线的法面【重要】曲线的自然参数表示 空间曲线曲线的密切平面空间曲线的基本三棱形【重要】单位切向量主法向量副法向量Frenet标架螺旋线的案例 曲线的曲率和曲率半径曲率的几何意义 曲线的挠率挠率…

政安晨:示例演绎Python的函数与获取帮助的方法

调用函数和定义我们自己的函数,并使用Python内置的文档,是成为一位Pythoner的开始。 通过我的上篇文章,相信您已经看过并使用了print和abs等函数。但是Python还有许多其他函数,并且定义自己的函数是Python编程的重要部分。 在本…

2024年美赛数学建模E题思路分析 - 财产保险的可持续性

# 1 赛题 问题E:财产保险的可持续性 极端天气事件正成为财产所有者和保险公司面临的危机。“近年来,世界已经遭受了1000多起极端天气事件造成的超过1万亿美元的损失”。[1]2022年,保险业的自然灾害索赔人数“比30年的平均水平增加了115%”。…

【lesson36】缓冲区的认识

文章目录 缓冲区的认识 缓冲区的认识 上次我们已经介绍了缓冲区的刷新策略,并且遇到了一个问题,这次我们就继续延续上次的话题。 一般而言行缓冲的设备文件-------显示器文件 一般而言全缓冲的设备文件-------磁盘文件 所有设备永远倾向于全缓冲&#…

git常用一些操作

1. git status // 查看当前目录更新 2. git checkout -b <NEW_BRANCH> // 新切一个分支&#xff08;只在第一次操作的时候做&#xff0c;后面就不用做了&#xff09; 3. git pull origin <BRANCH_NAME> …

JSR303参数校验-SpringMVC

文章目录 JSR303技术标准简介JSR303标准几个具体实现框架validation-apijakarta.validation-apihibernate-validatorspring-boot-starter-validation Spring Validationjavax.validation.constraints包下提供的注解org.hibernate.validator.constraints包扩展的注解校验注解默认…

如何在个人PC的桌面创建一个类似网吧的游戏菜单并分类?

GGTools 免费的桌面图标管理器、软件菜单、游戏菜单 单机版游戏菜单、个人/家用/家庭版游戏菜单、轻量级图标收纳软件

两台电脑怎么互传文件?4个方法提高传输效率!

“我在工作时总是需要将文件传给同小组的同事&#xff0c;想问问大家有什么两台电脑互传文件的简单操作方法吗&#xff1f;希望大家教教我呀&#xff01;” 在日常生活和工作中&#xff0c;我们经常需要将文件从一台电脑传输到另一台电脑。除了传统的U盘或移动硬盘等存储设备外…

【DBF格式转换器.exe】

一、概要 DBF文件是一种数据库文件格式&#xff0c;通常用于存储表格数据。这种文件格式曾经被广泛使用&#xff0c;尤其是在一些较旧的数据库系统中。然而&#xff0c;随着时间的推移&#xff0c;其他更现代的文件格式&#xff0c;如XLS&#xff08;Excel&#xff09;、CSV、D…

深入Spring MVC的工作流程

深入Spring MVC的工作流程 在Spring MVC的面试问题中&#xff0c;常常被询问到的一个问题。Spring MVC的程序中&#xff0c;HTTP请求是如何从开始到结束被处理的。为了研究这个问题&#xff0c;我们将需要深入学习一下Spring MVC框架的核心过程和工作流程。 1. 启动请求生命周…

代码随想录算法训练营29期|day39 任务以及具体任务

第九章 动态规划part02 62.不同路径 /*** 1. 确定dp数组下标含义 dp[i][j] 到每一个坐标可能的路径种类* 2. 递推公式 dp[i][j] dp[i-1][j] dp[i][j-1]* 3. 初始化 dp[i][0]1 dp[0][i]1 初始化横竖就可* 4. 遍历顺序 一行一行遍历* 5. 推导结果 。。。。。。。。** param m* p…

Windows内存管理 - 虚拟内存地址概念(Virtual Memory Address)

虽然可以寻址4GB的内存&#xff0c;而在PC里往往没有如此多的真实物理内存。操作系统和硬件&#xff08;这里指的是CPU中的内存管理单元MMU&#xff09;为使用者提供了虚拟内存的概念。Windows的所有程序&#xff08;包括Ring0层和Ring3层的程序&#xff09;可以操作的都是虚拟…

GPT3.5\GPT4系列计算完整prompt token数的官方方法

前言: ChatGPT如何计算token数&#xff1f;https://wtl4it.blog.csdn.net/article/details/135116493?spm1001.2014.3001.5502https://wtl4it.blog.csdn.net/article/details/135116493?spm1001.2014.3001.5502 GPT3.5\GPT4系列计算完整prompt token数的官方方法&#xff1…

航母编队反无人机蜂群作战能力需求分析

源自&#xff1a;指挥控制与仿真 作者&#xff1a;樊辉锦、巫银花、毕月、苏泽亚 “人工智能技术与咨询” 发布 声明:公众号转载的文章及图片出于非商业性的教育和科研目的供大家参考和探讨&#xff0c;并不意味着支持其观点或证实其内容的真实性。版权归原作者所有&#xff…

01 JDK的安装

JDK的安装 1 JDK的安装&#xff1a;参考&#xff1a; 1 JDK的安装&#xff1a; 说到Java&#xff0c;永远都有一个绕不开的话题&#xff0c;就是JDK(Java Development Kit)。JDK 是整个Java的核心&#xff0c;包括了Java运行环境&#xff0c;Java工具和Java基础的类库。安装JD…

来了来了,5000个红包封面免费领

今年公众号很慷慨&#xff0c;给长期运营的作者免费发放了6w个红包封面&#xff0c;感谢公众号平台。 往年还是自己花钱找别人设计&#xff0c;平台审核通过后才能正常发放给大家&#xff0c;自从AI绘画工具问世后&#xff0c;自己也能设计了。 下面的两个封面都是我用AI工具St…

05、全文检索 -- Solr -- Solr 全文检索之图形界面的文档管理(文档的添加、删除,如何通过关键字等参数查询文档)

目录 Solr 全文检索之文档管理添加文档使用 JSON 添加文档&#xff1a;使用 XML 添加文档: 删除文档使用 JSON 删除文档&#xff1a;使用 XML 删除文档&#xff1a; 查询文档查询文档的详细参数fq&#xff08;Filter Query&#xff09;&#xff1a;过滤sort&#xff1a;排序sta…

隧道穿透:常规反弹、加密反弹

目录 1、常规反弹 &#xff08;1&#xff09;Windows正向连接shell &#xff08;2&#xff09;Windows反向连接shell &#xff08;3&#xff09;Linux正向连接shell &#xff08;2&#xff09;利用Linux自带bash反弹Shell 2、加密反弹 1、常规反弹 假设在内网环境中发现…

寒假 day2

1、请编程实现单向循环链表的头插&#xff0c;头删、尾插、尾删 #include<stdio.h> #include<string.h> #include<stdlib.h> enum{FALSE-1,SUCCESS}; typedef int datatype; //定义节点结构体 //节点&#xff1a;数据域、指针域 typedef struct Node {//数…

机器学习系列——(九)决策树

简介 决策树作为机器学习的一种经典算法&#xff0c;在数据挖掘、分类和回归等任务中广泛应用。本文将详细介绍机器学习中的决策树算法&#xff0c;包括其原理、构建过程和应用场景。 原理 决策树是一种基于树状结构的监督学习算法&#xff0c;它通过构建一棵树来对数据进行分…