Python序列之集合

系列文章目录

  1. Python序列之列表
  2. Python序列之元组
  3. Python序列之字典
  4. Python序列之集合(本篇文章)

Python序列之集合

  • 系列文章目录
  • 前言
  • 一、集合是什么?
  • 二、集合的操作
    • 1.集合的创建
      • (1)使用`{}`创建
      • (2)使用`set()`函数创建
    • 2.集合元素的添加
      • (1)使用`add()`添加单个元素
      • (2)使用`update()`批量添加元素
    • 3.集合元素的删除
      • (1)使用`remove()`删除指定元素
      • (2)使用`discard()`删除指定元素
      • (3)使用`clear()`清空整个集合
      • (4)使用`pop()`随机弹出一个元素
    • 4.使用集合去重(重要应用)
    • 5.集合的数学运算
      • (1)交集
      • (2)并集
      • (3)差集(补集)
      • (4)对称差集
      • (5)判断是否为子集、母集
  • 总结


前言

前面我们已经讲了Python中的列表:Python序列之列表、元组:Python序列之元组和字典:Python序列之字典。今天我们再来看一下Python中另一种序列——集合。

集合这个词大家肯定不陌生,高中数学必修一第一章,便是集合。你应该还记得数学老师说过:“集合具有三个性质:确定性、互异性、无序性”,Python中的集合set便是借鉴了数学中的这种“数据结构”。同样满足这三个性质。

不仅如此,Python还提供的数学中集合的各种运算:求并集、求交集、求补集……

一、集合是什么?

集合是无序可变的,元素不能重复,故经常用集合来实现数据去重。实际上,集合底层是字典实现,集合的所有元素都是字典中的"键对象",因此是不能重复的且唯一的。
在这里插入图片描述

二、集合的操作

1.集合的创建

(1)使用{}创建

a = {3, 5, 7}
b = {}  # 创建一个空集合
c = {3}  # 只有一个元素的集合
print(a)  # 输出:{3, 5, 7}
print(b)  # 输出:{}
print(c)  # 输出:{3}

(2)使用set()函数创建

a = ['a', 2, True]
b = set(a)
c = set()  # 创建一个空集合print(b)  # 输出:{True, 'a', 2}
print(c)  # 输出:set()
print(type(b))  # 输出:<class 'set'>
print(type(c))  # 输出:<class 'set'>

由上面的两个例子可知,Python对空集合的打印表示有两种:{}set()

2.集合元素的添加

(1)使用add()添加单个元素

a = {10, 20, 30}
a.add('a')
print(a)  # 输出:{10, 'a', 20, 30}

(2)使用update()批量添加元素

a = {10, 20, 30}
b = [True, False, 999]
a.update(b)
print(a)  # 输出:{False, True, 999, 10, 20, 30}

3.集合元素的删除

(1)使用remove()删除指定元素

a = {10, 20, 30, 40, 50}
a.remove(30)
print(a)  # 输出:{50, 20, 40, 10}
a.remove(999)  # 报错:KeyError: 999

可以发现,当试图用remove()移除一个集合中并不存在的元素时,解释器会报错。这种反应过于暴力,因此有了更加温柔且绅士的删除方法——discard()

(2)使用discard()删除指定元素

a = {10, 20, 30, 40, 50}
a.remove(30)
print(a)  # 输出:{50, 20, 40, 10}
a.discard(999)  # 无报错
print(a)  # 输出:{50, 20, 40, 10}

当试图删除一个集合中并不存在的元素时,discard()并不会报错,而是什么都不干,程序照常往下运行,优雅且绅士~

(3)使用clear()清空整个集合

a = {10, 20, 30, 40, 50}
a.clear()
print(a)  # 输出:set()

(4)使用pop()随机弹出一个元素

a = {10, 20, 30, 40, 50}
b = a.pop()
print(b)  # 输出:50
print(a)  # 输出:{20, 40, 10, 30}

4.使用集合去重(重要应用)

我们可以充分利用集合的互异性来实现列表元素的去重:

a = [1, 1, 5, 6, 6, 8, 9, 8, 6]
b = set(a)
print(b)  # 输出:{1, 5, 6, 8, 9}

5.集合的数学运算

像数学中概念一样,Python对集合也提供了并集、交集、差集等运算。
在这里插入图片描述

(1)交集

在这里插入图片描述

下面展式了三种取交集的方法:

a = {1, 2, 3, 4}
b = {2, 3, 99, 100, 'yyy'}c = a & b  # 方法一:&
print(c)  # 输出:{2, 3}d = a.intersection(b)  # 方法二:取交集并返回一个新集合
print(d)  # 输出:{2, 3}print(a)  # 输出:{1, 2, 3, 4}
a.intersection_update(b)  # 方法三:取交集并更新原集合
print(a)  # 输出:{2, 3}

(2)并集

在这里插入图片描述
下面展式了两种取并集的方法:

a = {1, 2, 3, 4}
b = {2, 3, 99, 100, 'yyy'}c = a | b  # 方法一:|
print(c)  # 输出:{1, 2, 3, 4, 99, 100, 'yyy'}d = a.union(b)  # 方法二:union()
print(d)  # 输出:{1, 2, 3, 4, 99, 100, 'yyy'}

(3)差集(补集)

在这里插入图片描述

下面展式了三种取差集的方法:

a = {1, 2, 3, 4}
b = {2, 3, 99, 100, 'yyy'}c = a - b  # 方法一:-
print(c)  # 输出:{1, 4}d = a.difference(b)  # 方法二:取交集并返回一个新集合
print(d)  # 输出:{1, 4}print(a)  # 输出:{1, 2, 3, 4}
a.difference_update(b)  # 方法三:取交集并更新原集合
print(a)  # 输出:{1, 4}

注意:差集是有方向性的,A-B ≠ B-A

(4)对称差集

在这里插入图片描述

python集合set内置方法symmetric_differece(),可以用来返回两个集合(或调用对象集合与其它可迭代对象iterable)中非共同的元素组成的新集合set。

a = {1, 2, 3, 4}
b = {2, 3, 99, 100, 'yyy'}c = a ^ b  # 方法一:^
print(c)  # 输出:{1, 99, 100, 'yyy', 4}d = a.symmetric_difference(b)  # 方法二:取对称差并返回一个新集合
print(d)  # 输出:{1, 99, 100, 4, 'yyy'}print(a)  # 输出:{1, 2, 3, 4}
a.symmetric_difference_update(b)  # 方法三:取对称差并更新原集合
print(a)  # 输出:{1, 99, 100, 4, 'yyy'}

(5)判断是否为子集、母集

方法用途
a.issubset(b)判断a是否为b的子集
a.issuperset(b)判断a是否为b的母集
a.isdisjoint(b)判断ab的交集是否为空集
a = {1, 2, 3}
b = {1, 2, 3, 4, 5}
c = {1, 2, 'yyy'}
d = {'a', 'b', 'c'}print(a.issubset(b))  # 输出:True
print(a.issubset(c))  # 输出:Falseprint(b.issuperset(a))  # 输出:Trueprint(a.isdisjoint(c))  # 输出:False
print(a.isdisjoint(d))  # 输出:True

总结

Python中的集合可以认为是数学中集合的具体实现,具有数学集合的三个性质,不仅可以进行增删改查,还可以进行数学中的集合运算。

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

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

相关文章

《PCI Express体系结构导读》随记 —— 第I篇 第1章 PCI总线的基本知识(15)

接前一篇文章&#xff1a;《PCI Express体系结构导读》随记 —— 第I篇 第1章 PCI总线的基本知识&#xff08;14&#xff09; 1.3 PCI总线的存储器读写总线事务 1.3.4 PCI读写主存储器 前文已提到&#xff0c;由于本节内容较长&#xff0c;因此将后一部分内容放在本文中。 为…

【python高级用法】迭代器、生成器、装饰器、闭包

迭代器 可迭代对象&#xff1a;可以使用for循环来遍历的&#xff0c;可以使用isinstance()来测试。 迭代器&#xff1a;同时实现了__iter__()方法和__next__()方法&#xff0c;可以使用isinstance()方法来测试是否是迭代器对象 from collections.abc import Iterable, Iterat…

kivy中用anchrolayout

说明 AnchorLayout 是 Kivy 框架中用于管理界面元素位置的一种布局方式。AnchorLayout 的特点是&#xff0c;它可以将其子元素锚定到布局的边界上&#xff0c;例如顶部、底部、左侧或右侧。这使得在需要元素相对于其容器边界保持固定位置时非常有用。 界面 # mylayout.kvAnch…

Android : 画布的使用 简单应用

示例图&#xff1a; MyView.java&#xff1a; package com.example.demo;import android.content.Context; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.view.Vi…

JVM高频面试题(2023最新版)

JVM面试题 1、JVM内存区域 Jvm包含两个子系统和两个组件。 1.1子系统 Class loader&#xff08;类加载器&#xff09;&#xff1a;根据给定的全限定名类名&#xff08;java.lang.object&#xff09;来装载class文件到Runtime data area&#xff08;运行时数据区&#xff09;…

移动端开发框架mui代码在安卓模拟器上运行2(HbuilderX连接到模拟器)模拟器窗口及多开设置

开发工具 HBuilder X 3.8.12.20230817 注意&#xff1a;开发工具尽量用最新的或较新的。太旧的版本在开发调试过程中可能会出现莫名其妙的问题。 接上篇&#xff0c;移动端开发框架mui代码在安卓模拟器上运行&#xff08;HbuilderX连接到模拟器&#xff09;&#xff0c;这篇主要…

SkyWalking UI 修改发布Nginx

文章目录 SkyWalking UI修改图标修改路由发布到Nginx添加认证修改路由模式vite.config.ts添加baseNginx配置 SkyWalking UI skywalking-booster-ui下载地址 修改图标 替换 logo.svg 修改路由 router - data - index.ts 发布到Nginx 添加认证 # 安装 yum install -y h…

【STM32】STM32学习笔记-PWM驱动LED呼吸灯 舵机 直流电机(16)

00. 目录 文章目录 00. 目录01. 输出比较相关API1.1 TIM_OC1Init1.2 TIM_OCInitTypeDef结构体1.3 TIM_OCMode1.4 TIM_OutputState1.5 TIM_OutputNState1.6 TIM_OCPolarity1.7 TIM_OCNPolarity1.8 TIM_OCPolarity1.9 TIM_OCNPolarity 02. PWM实现呼吸灯接线图03. PWM实现呼吸灯示…

SetWindowsHookEx: 全局钩子实现键盘记录器

简介 SetWindowsHookEx 钩子(Hook)&#xff0c;是Windows消息处理机制的一个平台&#xff0c;应用程序可以在上面设置子程以监视指定窗口的某种消息&#xff0c;而且所监视的窗口可以是其他进程所创建的。当消息到达后&#xff0c;在目标窗口处理函数之前处理它。钩子机制允许应…

【后端】Docker学习笔记

文章目录 Docker一、Docker安装&#xff08;Linux&#xff09;二、Docker概念三、Docker常用命令四、数据卷五、自定义镜像六、网络七、DockerCompose Docker Docker是一个开源平台&#xff0c;主要基于Go语言构建&#xff0c;它使开发者能够将应用程序及其依赖项打包到一个轻…

idea构建maven项目报错的解决

使用idea创建了一个新的spring项目&#xff0c;maven配置完毕后&#xff0c;报错&#xff0c;引用的依赖不存在。 控制台报错信息如下&#xff1a; 通过查询资料&#xff0c;发现是阿里云的maven仓库中没有这个版本的jar包&#xff0c;导入无法引用到对应的依赖。 解决方法就是…

go的json数据类型处理

json对象转slice package mainimport ("encoding/json""fmt""github.com/gogf/gf/container/garray" )func main() {// JSON 字符串jsonStr : ["apple", "banana", "orange"]//方法一&#xff1a;// 解析 JSON 字…

HTML-基础知识-基本结构,注释,文档说明,字符编码(一)

1.超文本标记语言不分大小写。 2.超文本标签属性名和属性值不区分大小写。 3.超文本标签属性值重复&#xff0c;听取第一个。 4.html结构 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"vi…

单片机的存储、堆栈与程序执行方式

一、单片机存储区域 如图所示位STM32F103ZET6的参数&#xff1a; 单片机的ROM&#xff08;内部FLASH&#xff09;&#xff1a;512KB&#xff0c;用来存放程序代码的空间。 单片机的RAM&#xff1a;64KB&#xff0c;一般都被分配为堆、栈、变量等的空间。 二、堆和栈的概念 …

关于“Python”的核心知识点整理大全53

目录 18.2.7 Django shell 注意 18.3 创建网页&#xff1a;学习笔记主页 18.3.1 映射 URL urls.py urls.py 注意 18.3.2 编写视图 views.py 18.3.3 编写模板 index.html 往期快速传送门&#x1f446;&#xff08;在文章最后&#xff09;&#xff1a; 感谢大家的支…

FPGA - 231227 - 5CSEMA5F31C6 - 电子万年历

TAG - F P G A 、 5 C S E M A 5 F 31 C 6 、电子万年历、 V e r i l o g FPGA、5CSEMA5F31C6、电子万年历、Verilog FPGA、5CSEMA5F31C6、电子万年历、Verilog 顶层模块 module TOP(input CLK,RST,inA,inB,inC,switch_alarm,output led,beep_led,output [41:0] dp );// 按键…

<JavaEE> TCP 的通信机制(一) -- 确认应答 和 超时重传

目录 TCP的通信机制的核心特性 一、确认应答 1&#xff09;什么是确认应答&#xff1f; 2&#xff09;如何“确认”&#xff1f; 3&#xff09;如何“应答”&#xff1f; 二、超时重传 1&#xff09;丢包的概念 2&#xff09;什么是超时重传&#xff1f; 3&#xff09…

【VMware】Windows安装MySQL(5.78版本)及网络配置---图文并茂详细介绍

一 安装MySQL准备工作 ① 连接虚拟机传输MySQL压缩包 先查看虚拟机中的地址 命令&#xff1a; ipconfig 主机连接 在主机连接虚拟机后&#xff0c;将mysql压缩包和Navicat安装包复制到虚拟机下即可 ②解压MySQL压缩包 ③ my文件拷贝mysql安装根目录下 如下图的第一步&…

vue-springboot基于JavaWeb的家装一体化商城平台guptn

针对用户需求开发与设计&#xff0c;该技术尤其在各行业领域发挥了巨大的作用&#xff0c;有效地促进了家装一体化的发展。然而&#xff0c;由于用户量和需求量的增加&#xff0c;信息过载等问题暴露出来&#xff0c;为改善传统线下管理中的不足&#xff0c;本文将提出一套基于…

IntelliJ IDEA常用快捷键

【1】创建内容&#xff08;新建&#xff09;&#xff1a;altinsert 【2】main方法&#xff1a;psvm 【3】输出语句&#xff1a;sout 【4】复制行&#xff1a;ctrld 【5】删除行&#xff1a;ctrly&#xff08;很多编辑器ctrly是前进操作&#xff0c;如果选择 Delete Line&…