当前位置: 首页 > news >正文

Python基础学习笔记(十一)——集合

目录

  • 一、集合的介绍与创建
  • 二、集合的存储原理
  • 三、元素的修改
    • 1. 添加元素
    • 2. 删除元素
  • 四、集合的运算
  • 五、集合的判定

一、集合的介绍与创建

  集合set),一种可变、无序、不重复的数据结构,由大括号{}内、用逗号分隔的一组元素组成。

  集合的元素是可变的,即,它支持元素的引用的直接修改,并有相应的操作函数。

  与同为组合的序列不同,集合的元素是无序的。这意味着元素的顺序与其添加的顺序无关,并且元素也不再支持索引访问
  集合的访问仅可通过组合的通用操作进行,如:for循环遍历、成员运算。(见第三篇和第七篇)

  集合的元素是不重复的,也就是说,集合可自动对内部的元素进行去重处理。

  与序列同理,集合同样有赋值创建引用创建,对应类似的函数set()。此外,类似于列表生成式(见第六篇),还支持集合生成(推导)式

# 直接创建
set_ = {1, 2, 3}
print(set_)   # {1, 2, 3}# 引用创建
set_ = set([1, 2, 3])
print(set_)   # {1, 2, 3}# 空集
set_ = set()
print(set_)     # set()# 集合生成式
set_ = {i**2 for i in range(10) if i%2 == 0}
print(set_)     # {0, 64, 4, 36, 16}


二、集合的存储原理

  集合通过哈希表来实现存储,即使用散列函数将元素映射到表中的位置。

  元素的地址会通过哈希函数计算得到一个定长数字,该数字称为哈希值散列值。而哈希表是一种根据键的哈希值直接访问存储位置的数据结构,也称为散列表

  不同元素的哈希值可能相同,这就是哈希冲突。当发生冲突时,系统将元素添加到哈希桶的尾部,使其成为链表的节点。

  集合的元素不会重复,是因为哈希表的结构会使得相同元素的会映射到同一地址。

三、元素的修改

1. 添加元素

  • add(element):添加一个元素
  • update(iterable):添加一个组合内的元素
set_ = set()# 单个添加
set_.add('num')
print(set_)     # {'num'}# 多个添加
set_.update(range(5))
print(set_)     # {0, 1, 2, 3, 4, 'num'}


2. 删除元素

  • discard(element):删除一个指定元素
  • remove(element):删除一个指定元素(见第六篇)
  • pop():删除一个任意元素(见第六篇)
  • clear()清空元素(见第六篇)

  后三个函数同样适用于列表的元素删除,语法格式与集合相似,但缺失索引后,其功能范围有所变化。

  其中,pop()“任意” 是与哈希值有关的伪随机机制。

set_ = set(range(5))   # {0, 1, 2, 3, 4}# 定向删除
set_.discard(0)
print(set_)     # {1, 2, 3, 4}
set_.remove(1)
print(set_)     # {2, 3, 4}# 不定向删除
set_.pop()
print(set_)     # {3, 4}# 清空
set_.clear()
print(set_)     # set()


四、集合的运算

  • set1.intersection(set2)运算,对应运算符&,即set1 & set2
  • set1.union(set2)运算,对应运算符|,即set1 | set2
  • set1.difference(set2)运算,对应运算符-,即set1 - set2
  • set1.symmetric_difference(set2)对称差运算

  其中,并运算可用于元素的添加,区别在于:集合的运算返回的是一个新的集合。

set1 = {'c', 'a', 't'}
set2 = {'h', 'a', 't'}# 取交
print(set1.intersection(set2))          # {'t', 'a'}
print(set1 & set2)# 取并
print(set1.union(set2))                 # {'t', 'c', 'h', 'a'}
print(set1 | set2)# 取差:从 set1 中去掉 set1&set2 的元素
print(set1.difference(set2))            # {'c'}
print(set1 - set2)# 对称取差:从 set1|set2 中去掉 set1&set2 的元素
print(set1.symmetric_difference(set2))  # {'c', 'h'}
print((set1 | set2) - (set1 & set2))# 地址更改
print(id(set1))                 # 2357217208448
print(id(set2))                 # 2357217209344
print(id(set1.union(set2)))     # 2357217208672


五、集合的判定

  • set1.isdisjoint(set2):判断两集是否存在相同元素
  • set1.issubset(set2):判断set1是否为set2子集
  • set1.issuperset(set2):判断set1是否为set2超集

  以上函数的返回值类型为布尔

set1 = set('apple')
set2 = set('app')# 无共同元素为真
print(set1.isdisjoint(set2))    # False
# set2 Ↄ set1 为真
print(set1.issubset(set2))      # False
# set1 Ↄ set2 为真
print(set1.issuperset(set2))    # True

相关文章:

Python基础学习笔记(十一)——集合

目录 一、集合的介绍与创建二、集合的存储原理三、元素的修改1. 添加元素2. 删除元素 四、集合的运算五、集合的判定 一、集合的介绍与创建 集合(set),一种可变、无序、不重复的数据结构,由大括号{}内、用逗号分隔的一组元素组成。…...

FineReport

1.FineReport 官网 :FineReport产品简介- FineReport帮助文档 - 全面的报表使用教程和学习资料 下载地址 免费下载FineReport - FineReport报表官网 FineReport是一款用于报表制作,分析和展示的工具。 普通模板:是 FineReport 最常用&#xf…...

嵌入式就业前景好么

嵌入式就业前景在当前环境下是较为乐观的,以下是对嵌入式就业前景的详细分析: 广泛应用领域:嵌入式系统广泛应用于智能家居、医疗设备、航空航天等领域。随着物联网(IoT)的快速发展,预计到2024年&#xff…...

为啥找对象千万别找大厂男,还好我不是大厂的。。

网上看到一大厂女员工发文说:找对象千万别找大厂男,理由说了一大堆,无非就是大厂男为了逃避带娃,以加班为由宁愿在工位上玩游戏也不愿回家。当然这种观点有的人赞同有的人反对。 网友精彩评论: --------------下面是今…...

如何查看k8s中service的负载均衡策略

在Kubernetes中,Service的负载均衡策略一般由kube-proxy负责,kube-proxy使用iptables或IPVS规则进行负载均衡。默认情况下,kube-proxy使用的是轮询(Round Robin)策略,但是在使用IPVS模式时,可以…...

Linux-DNS域名解析服务01

BIND 域名服务基础 1、DNS(Domain Name System)系统的作用及类型 整个 Internet 大家庭中连接了数以亿计的服务器、个人主机,其中大部分的网站、邮件等服务器都使用了域名形式的地址,如 www.google.com、mail.163.com 等。很显然…...

[c++刷题]贪心算法.N01

题目如上: 首先通过经验分析,要用最少的减半次数,使得数组总和减少至一半以上,那么第一反应就是每次都挑数组中最大的数据去减半,这样可以是每次数组总和值减少程度最大化。 代码思路:利用大根堆去找数据中的最大值,…...

推荐常用的三款源代码防泄密软件

三款源代码防泄密软件——安秉源代码加密、Virbox Protector 和 MapoLicensor——确实各自在源代码保护的不同方面有其专长。这些软件可以满足企业对于源代码保护的三大需求:防止泄露、防止反编译和防止破解。 安秉源代码加密: 专注于源代码文件的加密&…...

Android 13 高通设备热点低功耗模式(2)

前言 之前写过一篇文章:高通热点被IOS设备识别为低数据模式,该功能仿照小米的低数据模式写的,散发的热点可以达到被IOS和小米设备识别为低数据模式。但是发现IOS设备如果后台无任何网络请求的时候,息屏的状态下过一会,会自动断开热点的连接。 分析 抓取设备的热点相关的…...

web前端任职条件:全面解析

web前端任职条件:全面解析 在当今数字化快速发展的时代,Web前端技术已经成为互联网行业不可或缺的一部分。作为一名Web前端开发者,需要具备哪些任职条件呢?本文将从四个方面、五个方面、六个方面和七个方面为您深入剖析。 四个方…...

分析医药零售数据该用哪个BI数据可视化工具?

数据是企业决策的重要依据,可以用于现代企业大数据可视化分析的BI工具有很多,各有各擅长的领域。那么哪个BI数据可视化工具分析医药零售数据又好又快? 做医药零售数据分析首推奥威BI数据可视化工具! 奥威BI数据可视化工具做医药…...

如何使用芯片手册做软件开发?

在阅读和利用芯片手册进行软件开发时,你应该关注以下几个关键点: 引脚功能:了解芯片上每个引脚的功能,包括它们可以被配置为输入还是输出,以及它们支持的特殊功能,如模拟输入、PWM输出、中断等。 寄存器映…...

基于深度学习的文本翻译

基于深度学习的文本翻译 基于深度学习的文本翻译,通常称为神经机器翻译(Neural Machine Translation, NMT),是近年来在自然语言处理(NLP)领域取得显著进展的技术。NMT通过使用深度神经网络来自动学习和翻译…...

Unity制作透明材质直接方法——6.15山大软院项目实训

之前没有在unity里面接触过材质的问题,一般都是在maya或这是其他建模软件里面直接得到编辑好材质的模型,然后将他导入Unity里面,然后现在碰到了需要自己在Unity制作透明材质的情况,所以先搜索了一下有没有现成的方法,很…...

【HarmonyOS NEXT】如何通过h5拉起应用(在华为浏览器中拉起应用)

华为浏览器支持拉起外部应用 浏览器访问网页经常会遇到deeplink的场景。当前处理方案统一为使用AMS系统能力startAbility去隐式拉起。传递的want参数为 { "actions": "ohos.want.action.viewData", "uri": deeplink链接 } 网页需要给自己的应用拉…...

模板方法模式(大话设计模式)C/C++版本

模板方法模式 C #include <iostream> using namespace std;class TestPaper { public:void TestQ1(){cout << "杨过得到&#xff0c;后来给了郭靖&#xff0c;炼成倚天剑&#xff0c;屠龙刀的玄铁可能是[ ]\na.球磨铸铁 b.马口贴 c.高速合金钢 d.碳素纤维&qu…...

数据提取:数据治理过程中的质量保障

一、引言 在数字化时代&#xff0c;数据已经成为企业决策和运营的核心资源。然而&#xff0c;数据的价值并不仅仅在于其数量&#xff0c;更在于其质量。数据治理作为确保数据质量、安全性和一致性的重要手段&#xff0c;对于企业的长期发展至关重要。其中&#xff0c;数据提取…...

第55期|GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以找…...

移植案例与原理 - utils子系统之file文件操作部件

Utils子系统是OpenHarmony的公共基础库&#xff0c;存放OpenHarmony通用的基础组件。这些基础组件可被OpenHarmony各业务子系统及上层应用所使用。公共基础库在不同平台上提供的能力&#xff1a; LiteOS-M内核&#xff1a;KV(key value)存储、文件操作、定时器、Dump系统属性。…...

个股期权有哪些股票?金融新手必须知道!

今天带你了解个股期权有哪些股票&#xff1f;在中国的股票市场中&#xff0c;个股期权是一种衍生品&#xff0c;允许投资者购买或卖出特定股票的期权合约。 个股期权有哪些股票&#xff1f; 个股期权是指在特定时间内&#xff0c;以特定价格买入或卖出特定数量的某只个股的权利…...

平庸的学术工作者

自己进入学术这条路&#xff0c;差不多十年了&#xff0c;回想自己目前的成果&#xff0c;自我评价为平庸。如果将同领域清华的年轻学者打分为 100 分的话&#xff0c;我将自己打分 65。 到目前为止&#xff0c;并不觉得智力因素在管理科学与工程领域的科研中有太大决定作用&a…...

安卓软件自动运行插件的开发源代码介绍!

随着移动互联网的快速发展&#xff0c;安卓操作系统凭借其开放性和灵活性&#xff0c;成为了众多开发者们的首选平台&#xff0c;在安卓应用的开发中&#xff0c;为了实现各种复杂的功能&#xff0c;插件化技术逐渐受到青睐。 其中&#xff0c;自动运行插件作为一种能够实现应…...

小程序餐饮点餐系统,扫码下单点菜,消费端+配送端+收银端+理端

目录 前言&#xff1a; 一、小程序功能有哪些 前端&#xff1a; 管理端&#xff1a; 二、实体店做小程序的好处 方便快捷的点餐和支付体验&#xff1a; 扩大店铺的曝光度和影响力&#xff1a; 优化顾客体验和服务质量&#xff1a; 降低成本和提高效率&#xff1a; 数据…...

说说你这个项目的架构情况吧?

说说你这个项目的架构情况吧&#xff1f; 从整体部署情况上&#xff0c;目前这个项目部署在两台服务器上&#xff0c;每台服务器部署一套应用在里面&#xff0c;如果某个服务挂了也不会影响到我们的整体的服务提供。当然&#xff0c;如果我们的服务器资源宽裕的话&#xff0c;可…...

接口响应时间测试

curl 要使用 curl 测试一个接口的响应时间具体步骤和命令示例: 打开你的终端或命令行工具。 使用 curl 命令并添加 -w(或者 --write-out)参数来输出时间统计信息。 示例命令: curl -o /dev/null -s -w "Time to Connect: %{time_connect}\nTime to Start Transfer: …...

C++ 61 之 函数模版

#include <iostream> #include <string> using namespace std;void swapInt(int &a,int &b){int temp a;a b;b temp; }void swapDou(double& a, double& b){double temp a;a b;b temp; }// T代表通用数据类型&#xff0c;紧接着后面的代码&a…...

甘特图如何画以及具体实例详解

甘特图如何画以及具体实例详解 甘特图是一种常见的项目管理工具又称为横道图、条状图(Bar chart)。是每一位项目经理和PMO必须掌握的项目管理工具。甘特图通过条状图来显示项目、进度和其他时间相关的系统进展的内在关系随着时间进展的情况。但是多项目经理和PMO虽然考了各种证…...

Android SDK版本号与API Level 的对应关系

自从Android 1.5系统以来&#xff0c;谷歌习惯于用甜点为每个版本的移动操作系统命名&#xff0c;而且按字母顺序排列&#xff0c;这个传统始于八年多以前&#xff0c;从早期的Android1.5 C&#xff08;Cupcake&#xff09;、Android 1.6 D&#xff08;Donut&#xff09;到最近…...

AES加解密工具类

文章目录 前言一、AES加解密工具类总结 前言 当涉及到数据的安全性和保密性时&#xff0c;加密是一种关键的技术手段。AES&#xff08;Advanced Encryption Standard&#xff09;是一种广泛使用的对称加密算法&#xff0c;被认为是目前最安全和最常用的加密算法之一。 一、AES…...

Http协议JSON格式

1. 计算机网络 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备&#xff0c;通过通信线路连接起来&#xff0c;在网络操作系统&#xff0c;网络管理软件及网络通信协议的管理和协调下&#xff0c;实现资源共享和信息传递的计算机系统。 思考:计算机网络…...

霸州有做滤芯网站的吗/免费网站推广方式

0、引入 CPU负载率一定程度上反映了系统CPU的繁忙程度&#xff0c;且在多核cpu下与负载均衡&#xff0c;进程调度关系密切。实现对CPU负载率的监测有利于实现一套稳定可靠适用的系统。 1、负载率相关定义 1.1 平均负载的定义 1.1.1 Load average理解&#xff1a; 在特定时间…...

自适应网站cms/sem竞价培训班

DMitry&#xff08;Deepmagic Information Gathering Tool&#xff09;是一个一体化的信息收集工具。它可以用来收集以下信息&#xff1a; 根据IP&#xff08;或域名&#xff09;来查询目标主机的Whois信息在Netcraft.com的网站上挖掘主机信息查找目标域中用的子域查找目标域的…...

wordpress 栏目标题/关键词网站

哈哈&#xff1a;我们在开发微信小程序时写一个列表时&#xff0c;往往只写列表的其中一个然后利用wx&#xff1a;for循环出来整个列表wxml代码如下&#xff1a; <view classindex-item-bg><view classindex-item><view classindex-item-box wx:for"{{shor…...

做网站销售怎么样/seo排名如何

源地址&#xff1a;http://blog.csdn.net/vvqboy/article/details/43649567 步骤一&#xff1a;开启core dump文件生成 ulimit -c unlimited 步骤二&#xff1a;设置core dump文件位置 vi /etc/sysctl.conf 修改&#xff08;添加&#xff09;如下两个变量 kernel.core_…...

医疗网站的建设设计要注意什么/郑州粒米seo外包

在我们详细分析SurfaceFlinger之前要了解一下VSync信号&#xff0c;为下一节分析Vsync工作原理打下基础。 VSync信号相关 首先我们要了解以下几个概念&#xff1a; 屏幕刷新率 即 Refresh Rate 或 Scanning Frequency&#xff0c;单位赫兹/Hz&#xff0c;是指设备刷新屏幕的频…...

做设计一般用的素材网站是什么意思/郑州seo联系搜点网络效果好

本来是想找一道生成树的题做的...结果被洛咕的标签骗到了这题...结果是二分答案与生成树一点mao关系都没有.... 题目大意&#xff1a;给你一个序列&#xff0c;请你删去某一个$l~r$区间的值&#xff08;$2<i<j<n-1$&#xff09;&#xff0c;使得剩余元素的平均值最小。…...