【Python】一文带你掌握数据容器之集合,字典

目录:

一、集合

思考:我们目前接触到了列表、元组、字符串三个数据容器了。基本满足大多数的使用场景为何又需要学习新的集合类型呢?

通过特性来分析:
(1)列表可修改、支持重复元素且有序
(2)元组、字符串不可修改、支持重复元素且有序

大家有没有看出一些局限?

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

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

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


1.集合的定义

基本语法:

# 定义集合字面量
{元素,元素,......,元素}# 定义集合变量
变量名称 = {元素,元素,......,元素}# 定义空集合
变量名称 = set()

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

列表使用[  ]

元组使用( )

字符串使用"  "

集合使用{  }


 2.集合的常用操作

首先,因为集合是无序的,所以集合不支持:下标索引访问但是集合和列表一样,是允许修改的,所以我们来看看集合的修改方法

编号操作作用
1集合.add(元素)集合内添加一个元素
2集合remove(元素)移除集合内指定的元素
3集合.pop()从集合中随机取出一个元素
4集合.clear()将集合清空
5集合1.difference(集合2)得到一个新集合,内含2个集合的差集原有的2个集合内容不变
6集合1.differenceupdate(集合2)在集合1中,删除集合2中存在的元素集合1被修改,集合2不变
7集合1.union(集合2)得到1个新集合,内含2个集合的全部元素原有的2个集合内容不变
8len(集合)得到一个整数,记录了集合的元素数量
(1)添加新元素

语法:集合.add(元素)将指定元素,添加到集合内

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

my_set = {"Hello", "World"}
my_set.add("bite")
print(my_set)  # 结果:{'World', 'bite', 'Hello'}(顺序可能会变)
(2) 移除元素

语法:集合.remove(元素),将指定元素,从集合内移除

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

my_set = {"Hello", "World"}
my_set.remove("World")
print(my_set)  # 结果:{'Hello'}
 (3) 从集合中随机取出元素

语法:集合.pop(),功能,从集合中随机取出一个元素

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

my_set = {"Hello", "World"}
element = my_set.pop()
print(my_set)  # 结果:{'Hello'}
print(element)  # 结果:World
(4) 清空集合

语法:集合.clear(),功能,清空集合

结果:集合本身被清空

my_set = {"Hello", "World"}
my_set.clear()
print(my_set)  # 结果:set()
 (5)取出2个集合的差集

语法:集合1.difference(集合2),功能: 取出集合1和集合2的差集 (集合1有而集合2没有的)

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

set1 = {1, 2, 3}
set2 = {1, 5, 6}
set3 = set1.difference(set2)
print(set3)  # 结果:{2, 3}
print(set2)  # 结果:{1, 5, 6}
print(set1)  # 结果:{1, 2, 3}
(6) 消除2个集合的差集

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

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

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

set1 = {1, 2, 3}
set2 = {1, 5, 6}
set1.difference_update(set2)
print(set1)  # 结果:{2, 3}
print(set2)  # 结果:{1, 5, 6}
(7) 2个集合合并

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

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

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

set1 = {1, 2, 3}
set2 = {1, 5, 6}
set3 = set1.union(set2)
print(set3)  # 结果:{1, 2, 3, 5, 6}
print(set1)  # 结果:{1, 2, 3}
print(set2)  # 结果:{1, 5, 6}

二、字典

思考:老师有一份名单,记录了学生的姓名和考试总成绩,现在需要将其通过Python录入至程序中,并可以通过学生姓名检索学生的成绩,由此引入了字典,使用字典可以用key取出 Value的操作

1.字典的定义

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

# 定义字典字面量
{key: value, key: value, ......, key: value}# 定义字典变量my_dict = {key: value, key: value, ......, key: valuel}# 定义空字典
my_dict = {}    # 空字典定义方式1
my_dict = dict()  # 空字典定义方式2

注意: 字典内Key不允许重复,重复添加等同于覆盖原有数据

# 定义重复Key的宇典
my_dict1 = {"王力鸿": 99,"王力鸿": 88,"林俊节": 77}
print(f"重复key的字典的内容是:{my_dict1}")# 结果:重复key的字典的内容是:{'王力鸿':88,林俊节':77}

2.字典数据的获取

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

但是字典可以通过Key值来取得对应的Value

# 语法,字典[Key]可以取到对应的value
stu_score = {"李四": 99, "张三": 88,"王二麻子": 77}
print(stu_score["李四"])   # 结果:99
print(stu_score["张三"])   # 结果:88
print(stu_score["王二麻子"])  # 结果:77

3.字典的嵌套

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

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

需求如下: 记录学生各科的考试信息

stu_score_dict = {"王力鸿": {"语文": 77,"数学": 66,"英语": 33}, "周杰轮": {"语文": 88,"数学": 86,"英语": 55}, "林俊节": {"语文": 99,"数学": 96,"英语": 66}
}
print(f"学生的考试信息是:{stu_score_dict}")# 结果:学生的考试信息是:{'王力鸿': {'语文': 77, '数学': 66, '英语': 33}, '周杰轮': {'语文': 88, '数学': 86, '英语': 55}, '林俊节': {'语文': 99, '数学': 96, '英语': 66}}

从嵌套字典中获取数据:

score = stu_score_dict["周杰轮"]["语文"]
print(f"周杰轮的语文分数是:{score}")# 结果:周杰轮的语文分数是:88

4.字典的常用操作

编号操作作用
1字典[Key]获取指定Key对应的Value值
2字典[Key]= Value添加或更新键值对
3字典.pop(Key)取出Key对应的Value并在字典内删除此Key的键值对
4字典.clear()清空字典
5字典.keys()获取字典的全部Key,可用于for循环遍历字典
6len(字典)计算字典内的元素数量
(1)新增元素

语法:字典[Key] =Value,结果:字典被修改,新增了元素

my_dict1 = {"王力鸿": 88, "林俊节": 77}
# 新增,张学油的考试成绩
my_dict1['张学油'] = 66
print(my_dict1)# 结果:{'王力鸿': 88, '林俊节': 77, '张学油': 66}
(2)更新元素

语法:字典[Key]=Value,结果:字典被修改,元素被更新

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

my_dict1 = {"王力鸿": 88, "林俊节": 77}
my_dict1['王力鸿'] = 66
print(my_dict1)# 结果:{'王力鸿': 66, '林俊节': 77}
(3)删除元素

语法: 字典.pop(Key),结果:获得指定Key的Value,同时字典被修改,指定Key的数据被删除

my_dict1 = {"王力鸿": 88, "林俊节": 77}
value = my_dict1.pop("王力鸿")
print(value)   # 结果:88
print(my_dict1)  # 结果:{'林俊节': 77}
(4)清空字典

语法:字典.clear(),结果:字典被修改,元素被清空

my_dict1 = {"王力鸿": 88, "林俊节": 77}
my_dict1.clear()
print(my_dict1)# 结果:{}
(5)获取字典的全部Key

语法:字典.keys(),可用于for循环遍历字典

# 获取全部的key
my_dict = {"周杰轮": 99, "王力鸿": 88, "林俊节": 77}
keys = my_dict.keys()
print(f"字典的全部keys是:{keys}")  # 结果:字典的全部keys是:dict_keys(['周杰轮', '王力鸿', '林俊节'])# 遍历字典
# 方式一:通过获取到全部的key来完成遍历
for key in keys:print(f"字典的key是:{key}")print(f"字典的value是: {my_dict[key]}")# 方式二:直接对字典进行for循环,每一次循环都是直接得到key
for key in my_dict:print(f"字典的key是:{key}")print(f"字典的value是: {my_dict[key]}")

5.字典的特点

经过上述对字典的学习,可以总结出字典有如下特点:

(1)可以容纳多个数据

(2)可以容纳不同类型的数据

(3)每一份数据是KeyValue键值对

(4)可以通过Key获取到Value,Key不可重复 (重复会覆盖)

(5)不支持下标索引

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

(7)支持for循环,不支持while循环


本次内容就到此啦,欢迎评论区或者私信交流,觉得笔者写的还可以,或者自己有些许收获的,麻烦铁汁们动动小手,给俺来个一键三连,万分感谢 !  

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

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

相关文章

Home Assistant使用ios主题更换背景

Home Assistant使用ios主题、更换背景 lovelace-ios-dark-mode-theme 默认前置情况,1、已安转HACS插件2、搜索安装 IOS Dark Mode Theme1)第一、二步应该很容易实现,configuration.yaml文件很容易被找到2)而本人在进行第三步操作时…

php+vue3实现点选验证码

buildadmin 中的点选验证码实现 验证码类 <?phpnamespace ba;use Throwable; use think\facade\Db; use think\facade\Lang; use think\facade\Config;/*** 点选文字验证码类*/ class ClickCaptcha {/*** 验证码过期时间(s)* var int*/private int $expire 600;/*** 可以…

我记不住的那些命令(不断更新中)

fzf 一种进行模糊查找的命令行工具 主页&#xff1a;https://github.com/junegunn/fzf 我的主机是 Kali&#xff0c;通过apt进行安装fzf&#xff0c;并进行配置。 # apt install fzf # apt show fzf 通过参考/usr/share/doc/fzf/README.Debian来进行快速配置快捷键和自动补…

保护您的Google账号安全:检查和加固措施

简介&#xff1a;随着我们在日常生活中越来越依赖于Google账号&#xff0c;我们的个人信息和敏感数据也变得越来越容易受到威胁。为了确保您的Google账号的安全性&#xff0c;本文将介绍一些简单但有效的方法&#xff0c;帮助您检查和加固您的Google账号。 --- 在数字时代&am…

squid代理服务器

squide是正向代理&#xff0c;缓存加速。基于aci访问控制协议。可以过滤控制。可以实现访问控制 squid代理的工作机制 nginx是转发 1、 squid是代替客户端向网站请求数据&#xff0c;不需要访问代理的ip地址。直接请求目的网站即可。由代理服务器处理请求和响应。squid也可以…

[Mac软件]Adobe Media Encoder 2024 V24.0.2免激活版

软件说明 使用Media Encoder&#xff0c;您将能够处理和管理多媒体。插入、转码、创建代理版本&#xff0c;并几乎以任何可用的格式输出。在应用程序中以单一方式使用多媒体&#xff0c;包括Premiere Pro、After Effects和Audition。 紧密整合 与Adobe Premiere Pro、After …

WebRTC简介及使用

文章目录 前言一、WebRTC 简介1、webrtc 是什么2、webrtc 可以做什么3、数据传输需要些什么4、SDP 协议5、STUN6、TURN7、ICE 二、WebRTC 整体框架三、WebRTC 功能模块1、视频相关①、视频采集---video_capture②、视频编解码---video_coding③、视频加密---video_engine_encry…

保护数字前沿:下一代防火墙如何塑造网络安全的未来

下一代防火墙通过提供先进的威胁检测、精细控制和云安全功能&#xff0c;正在重塑网络安全的未来。随着数字环境的不断发展&#xff0c;组织必须采用这些创新解决方案来保护其数字资产并维护安全的数字前沿。 在当今互联的世界中&#xff0c;网络威胁变得越来越复杂&#xff0c…

阿里云ACK(Serverless)安装APISIX网关及APISIX Ingress Controller

在k8s上安装apisix全家&#xff0c;通过helm安装很简单&#xff0c;但是会遇到一些问题。 安装 首先登录阿里云控制台&#xff0c;在ACK集群详情页&#xff0c;进入CloudShell&#xff0c;执行下面helm命令安装apisix、apisix-ectd、apisix-dashboard和apisix-ingress-contro…

第1关:构造函数与析构函数的实现

题目&#xff1a;根据.h写出.cpp 考点&#xff1a; 1.链表的默认构造&#xff0c; 拷贝构造&#xff0c;传参构造以及析构函数等。 代码&#xff1a; /********** BEGIN **********/ #include <cstdlib> #include <cstring> #include "LinkedList.h&…

ARM PMU

PMU单元概览 ARM PMU概要 PMU作为一个扩展功能&#xff0c;是一种非侵入式的调试组件。 对PMU寄存器的访问可以通过CP15协处理器指令和Memory-Mapped地址。 基于PMUv2架构&#xff0c;A7处理器在运行时可以收集关于处理器和内存的各种统计信息。对于处理器来说这些统计信息中…

AI:83-基于深度学习的手势识别与实时控制

🚀 本文选自专栏:人工智能领域200例教程专栏 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的代码,详细讲解供大家学习,希望可以帮到大家。欢迎订阅支持,正在不断更新中,…

【Linux奇遇记】我和Linux的初次相遇

&#x1f308;个人主页: Aileen_0v0 &#x1f525;系列专栏:Linux奇遇记系列专栏&#x1f4ab;"没有罗马,那就自己创造罗马~" 目录 前端和后端的介绍 1.前端 2.后端 3.前后端区别 Linux在前后端开发中的角色 如何学习Linux 去进行程序开发 Linux的常见根目…

爆款元服务!教你如何设计高使用率卡片

元服务的概念相信大家已经在 HDC 2023 上有了很详细的了解&#xff0c;更轻便的开发方式&#xff0c;让开发者跃跃欲试。目前也已经有很多开发者开发出了一些爆款元服务&#xff0c;那么如何让你的元服务拥有更高的传播范围、更高的用户使用率和更多的用户触点呢&#xff1f;设…

MySQL 索引事务

MySQL 索引&事务 文章目录 MySQL 索引&事务1. 索引1.1 概念1.2 作用1.3 使用场景1.4 使用 2. 事务2.1 为什么使用事务2.2 事务概念2.3 事务的特性2.4 使用 1. 索引 1.1 概念 索引(index)是一种特殊的文件&#xff0c;包含着对数据表里所有记录的引用指针。可以对表中的…

学好Python-新手小白如何做?

新手小白如何学好Python?有哪些参考方法吗?这是一个老生常谈的话题了。今天为大家带来两位前辈的分享&#xff0c;他们给出了非常实用的方法和思路&#xff0c;希望对你有所帮助。 1、多练&#xff0c;两个字&#xff1a;多练 如果真的要说方法可以参考如下&#xff1a; ①…

排查线程阻塞问题

案例代码 package first;import java.util.concurrent.TimeUnit;public class DeadLock {private static volatile Object lock new Object();public static void main(String[] args) {new Thread(() -> {test1();}).start();new Thread(() -> {test2();}).start();}p…

centos下安装mysql8版本

1、如果服务器没有wget&#xff0c;先下载wget工具 sudo yum install wget 2、下载指定mysql版本的tar包 sudo wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.21-1.el7.x86_64.rpm-bundle.tar 3、解压tar包 sudo tar -xvf mysql-8.0.21-1.el7.x86_64.rpm…

《QT从基础到进阶·二十四》按钮组QButtonGroup,单选框QRadioButton和多选框QCheckBox

1、按钮组QButtonGroup 如果有多个单选按钮&#xff0c;可以统一放进一个按钮组。 图中有三个单选按钮放进了一个QGroupBox,并且设置了水平布局&#xff0c;现在要将这三个单选按钮放进一个按钮组&#xff0c;之前的想法是先把三个按钮加入按钮组&#xff0c;再把按钮组放进QG…