Python 集合

一、集合概念

        集合(set)是一个无序的不重复元素序列。

二、集合的创建

        可以使用大括号{}或者set方法创建集合,但是创建一个空集合必须使用set而不能使用空{},因为在python中空{}用于创建空字典。

1、set函数

        set()函数创建一个无序不重复元素集,返回值为新的集合对象。示例如下:

list_1 = ['h','l','e','l','o']
set_1 = set(list_1)
print(set_1) #输出为{'o', 'h', 'e', 'l'}

三、 集合运算规则

1、交集

        set_1 & set_2:返回一个新的集合对象,包括同时在集合set_1和set_2中的共同元素,示例如下:

list_1 = ['h','l','e','l','o']
list_2 = ['w','o','r','l','d']
set_1 = set(list_1)
set_2 = set(list_2)
print(set_1 & set_2) #输出为{'o', 'l'}

        交集方法为set.intersection,示例如下:

set1 = {1,2,3,4,5}
set2 = {2,3,4,6,7,8}
print(set1.intersection(set2))#输出为{2, 3, 4},在set1中存在又在set2中存在的元素

2、 并集

        set_1 | set_2:返回一个新的集合对象,包括集合set_1和set_2中的所有元素,示例如下:

list_1 = ['h','l','e','l','o']
list_2 = ['w','o','r','l','d']
set_1 = set(list_1)
set_2 = set(list_2)
print(set_1 | set_2) #输出为{'l', 'w', 'o', 'e', 'r', 'h', 'd'}

        并集方法为set.union,示例如下:

set1 = {1,2,3,4,5}
set2 = {2,3,4,6,7,8}
print(set1.union(set2))#输出为{1, 2, 3, 4, 5, 6, 7, 8}

3、 差集

        set_1 - set_2:返回一个新的集合对象,包括在集合set_1中但不在set_2中的元素,示例如下:

list_1 = ['h','l','e','l','o']
list_2 = ['w','o','r','l','d']
set_1 = set(list_1)
set_2 = set(list_2)
print(set_1 - set_2) #输出为{'h', 'e'}

        差集方法为set.difference,示例如下:

set1 = {1,2,3,4,5}
set2 = {2,3,4,6,7,8}
print(set1.difference(set2))#输出为{1, 5}  set1去除set2中存在的元素

4、 补集

        set_1^set_2:返回一个新的集合对象,包括集合set_1和set_2的非共同元素,即异或运算,示例如下:

list_1 = ['h','l','e','l','o']
list_2 = ['w','o','r','l','d']
set_3 = {'l'}
set_1 = set(list_1)
set_2 = set(list_2)print(set_1 ^ set_2) #输出为{'w', 'e', 'r', 'h', 'd'}
print(set_1 ^ set_2 ^ set_3) #输出为{'e', 'l', 'd', 'w', 'r', 'h'} ,注意异或运算,三者异或时,三个共有的元素也为真

        补集方法为 set.symmetric_difference,示例如下:

set1 = {1,2,3,4,5}
set2 = {2,3,4,6,7,8}
print(set1.symmetric_difference(set2))#输出为{1, 5, 6, 7, 8},set1与set2的异或运算

5、 集合的比较 

(1) 集合的比较方法

set.issubset:判断一个集合是不是另一个集合的子集,是则返回True,否则返回False.

set.superset:判断一个集合是不是另一个集合的超集,是则返回True,否则返回False

示例如下:

set_1 = {1,2,3,4,5}
set_2 = {1,2,3}print(set_1.issuperset(set_2))#输出为True   set_1是set_2的超集
print(set_2.issubset(set_1))#输出为False  set_2是set_1的子集

(2)集合的比较操作符

<:真正意义上的子集,在集合A是集合B的子集的同时A不等于B

<=:子集或相等,集合A是集合B的子集或相等

==:相等,集合A和集合B中的元素相等,但是两个集合并不必须相等()

>=:超集或相等,集合A是集合B的超集或相等

>:超集,集合A是集合B的超集

示例如下:

set_1 = {1,2,3,4,5}
set_2 = {1,2,3}
set_3 = {1,2,3,3}print(set_1 > set_2)  #输出为True,set_1是set_2的超集
print(set_1 >= set_1) #输出为True
print(set_2 == set_3) #输出为True
print(set_2 <= set_2) #输出为True
print(set_2 < set_1)  #输出为True,set_2是set_1的子集

四、集合的基本方法

1、元素添加

   (1)set.add方法

        向集合添加元素,但只能添加可哈希数据类型,即不可变数据类型:数值、元组、字符串。示例如下:

set_1 = {'h'}
set_1.add('e')
print(set_1) #输出为{'e', 'h'}

注意:add方法单次只能添加一个元素,否则会报错TypeError: add() takes exactly one argument (2 given

  (2)set.update

        向集合添加元素,但只能添加可迭代的数据类型,即字符串、元组、列表、字典。update方法会将元素进行拆分再添加,当参数为字典时,会将字典中的健作为集合元素添加进集合,忽略值。示例如下:

set_1 = {'h'}set_1.update((1,2),(2,3),{8:1,9:3},('l','8'))
print(set_1) #输出为{'l', 1, 2, 3, 'h', '8', 8, 9}

 补充add方法与update方法的区别:

(1)参数不同:add方法只可以添加不可变数据类型,如数字、元组、字符串,否则会报错TypeError: unhashable type: 'set',并且一次智能添加一个元素;而update方法只能添加可迭代元素,如字符串、列表、元组、字典,若添加数字会报错object is not iterable,一次可以添加多个元素。

(2)返回结果不同:add方法会把元素整体性的添加进去,即元素为元组时,加入到集合中也作为元组存在;update方法会把元素查分再添加进去,当参数为字典时,会将字典中的健作为集合元素添加进集合,忽略值。

2、元素删除

 (1)set.remove

        从集合中移除元素,如果元素在集合中不存在,则会引发KeyError.示例如下:

set_1 = {'h','e'}
set_1.remove('h')
print(set_1)#输出为{'e'}
set_1.remove('x')#输出为KeyError: 'x'

(2)set.discard方法

         从集合中移除元素。如果元素不存在,不报错,该方法无返回值。示例如下:

set_1 = {'h','e'}set_1.discard('h')print(set_1)#输出为{'e'}

 (3)set.pop方法

         从集合中随机移除并返回该元素,如果集合为空则会引发KeyError。Pop方法会对集合进行无序的排列,然后将这个无需排列集合的左边第一个元素进行删除。示例如下:

set_1 = {'h','e','l','2'}set_1.pop()
print(set_1)#输出为{'l', '2', 'h'}set_1.pop()
print(set_1)#输出为{'2', 'h'}set_1.pop()
print(set_1)#输出为{'h'}set_1.pop()
print(set_1)#输出为set()set_1.pop()
print(set_1)#输出为KeyError: 'pop from an empty set'

(4)set.clear方法

        移除集合中所有元素。示例如下:

set_1 = {'h','e','l','2'}set_1.clear();
print(set_1)#输出为set()

3、 Set.isdisjoint方法

用于判断两个集合是否包含相同的元素,如果没有则返回True,否则返回False。示例如下:

set_1 = {1,2,3}
set_2 = {2,3,4}
set_3 = {4,5,6}print(set_1.isdisjoint(set_2))#输出为False
print(set_1.isdisjoint(set_3))#输出为True

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

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

相关文章

时序分解 | MATLAB实现基于EWT经验小波变换的信号分解分量可视化

时序分解 | MATLAB实现基于EWT经验小波变换的信号分解分量可视化 目录 时序分解 | MATLAB实现基于EWT经验小波变换的信号分解分量可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 EWT经验小波变换 包含频谱相关系数 可直接运行 Matlab代码 1.可自由设置分量个数&…

OPENCV--调用GrabCut实现图像分割

# -*- coding:utf-8 -*- """ 作者:794919561 日期:2023/9/6 """ import cv2 import numpy as npclass Application:rect = (0,0,0,0)flag_rect = FalsestartX

SpringBoot整合Easy-ES操作演示文档

文章目录 SpringBoot整合Easy-ES操作演示文档1 概述及特性1.1 官网1.2 主要特性 2 整合配置2.1 导入POM2.2 Yaml配置2.3 EsMapperScan 注解扫描2.4 配置Entity2.5 配置Mapper 3 基础操作3.1 批量保存3.2 数据更新3.3 数据删除3.4 组合查询3.5 高亮查询3.6 统计查询 4 整合异常4…

106. 从中序与后序遍历序列构造二叉树

题目链接&#xff1a; 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 思想&#xff1a; 来看一下一共分几步&#xff1a; 第一步&#xff1a;如果数组大小为零的话&#xff0c;说明是空节点了。 第二步&#xff1a;如果不为空&#xff0c;那么取…

联发科3纳米芯片预计2024年量产,此前称仍未获批给华为供货

9月7日&#xff0c;联发科与台积电共同宣布&#xff0c;联发科首款采用台积电3纳米制程生产的天玑旗舰芯片开发进度顺利&#xff0c;已成功流片&#xff0c;预计将在2024年量产&#xff0c;并将于下半年正式上市。这款旗舰芯片并非今年上市的天玑9300。 据联发科总经理陈冠州介…

prize_p1

文章目录 解题过程代码审计思路问题解决数组绕过preg_match__destruct的触发修改phar文件以及签名phar://支持的后缀 题解方法一&#xff08;数组绕过&#xff09;方法二&#xff08;gzip绕过&#xff09; 解题过程 源代码 <META http-equiv"Content-Type" conte…

OpenLDAP | ubuntu 安装配置和汉化 phpldapadmin

仅做汉化配置记录&#xff0c;后续完善openLDAP Samba。 sudo apt-get install phpldapadmin -y sudo vi /etc/phpldapadmin/config.php $servers->setValue(server,host,127.0.0.1); //修改为你ldap的服务器地址 $servers->setValue(server,base,array(dcexample,dc…

Ubuntu中设置代理的方式

由于公司的局域网环境&#xff0c;只提供以代理服务器的方式上网&#xff0c;因此有必要记录一下设置代理的方式&#xff0c;方便以后使用。 系统设置代理&#xff1a; System Settings -> Network -> Network proxy Method选择Manual&#xff0c;然后设置 HTTP Proxy…

AI文本创作在百度App发文的实践

作者 | 内容生态端团队 导读 大语言模型&#xff08;LLM&#xff09;指包含数百亿&#xff08;或更多&#xff09;参数的语言模型&#xff0c;这些模型通常在大规模数据集上进行训练&#xff0c;以提高其性能和泛化能力。在内容创作工具接入文心一言AI能力后&#xff0c;可以为…

论文复现--lightweight-human-pose-estimation-3d-demo.pytorch(单视角多人3D实时动作捕捉DEMO)

分类&#xff1a;动作捕捉 github地址&#xff1a;https://github.com/Daniil-Osokin/lightweight-human-pose-estimation-3d-demo.pytorch 所需环境&#xff1a; Windows10&#xff0c;conda 4.13.0&#xff1b; 目录 conda环境配置安装Pytorch全家桶安装TensorRT&#xff08;…

C++设计模式_05_Observer 观察者模式

接上篇&#xff0c;本篇将会介绍C设计模式中的Observer 观察者模式&#xff0c;和前2篇模板方法Template Method及Strategy 策略模式一样&#xff0c;仍属于“组件协作”模式。Observer 在某些领域也叫做 Event 。 文章目录 1. 动机&#xff08; Motivation&#xff09;2. 代码…

spring boot 2.7 -> 3.0升级指南

spring boot提供一个版本迁移指南 2.7 -> 3.0

红帽 RHEL 源码限制成契机,AlmaLinux 获捐更可“做自己”

红帽在两个月前发布公告声称&#xff0c;将限制对 Red Hat Enterprise Linux (RHEL) 源代码的访问&#xff0c;早前曾报道&#xff0c;此举导致 AlmaLinux 、Rocky Linux 等 Linux 发行版未来发展严重受阻。 对于这一决策&#xff0c;AlmaLinux OS 基金会主席 Benny Vasquez 此…

few shot目标检测survey paper笔记(整体概念)

paper: Few-Shot Object Detection: A Comprehensive Survey (CVPR2021) 深度学习提高了目标检测的精度&#xff0c;但是它需要大量的训练数据。 对于训练数据集中没有见过的目标&#xff0c;是检测不了的&#xff0c;所以就限制了在实际中的应用。 如果想让模型去识别新的目标…

element-table 行的拖拽更改顺序(无需下载sortableJs

样例展示&#xff1a;vueelement 通过阅读element文档我们发现element并不提供拖拽相关的api 本博客通过element提供的行类名 注册函数 实现行与行的拖拽 1.设置el-table 的行样式类名 这里是用的是 function <el-table:data"outputData":row-class-name&qu…

Vue知识系列(3)每天10个小知识点

目录 系列文章目录Vue知识系列&#xff08;1&#xff09;每天10个小知识点Vue知识系列&#xff08;2&#xff09;每天10个小知识点 知识点**21. Vue不同生命周期**的概念、作用、原理、特性、优点、缺点、区别、使用场景**22. Vue 子组件和父组件执行顺序****23. created 和 mo…

H.265 视频在浏览器中的播放问题探究

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f405;&#x1f43e;猫头虎建议程序员必备技术栈一览表&#x1f4d6;&#xff1a; &#x1f6e0;️ 全栈技术 Full Stack: &#x1f4da…

2023/9/12 -- C++/QT

作业 实现一个图形类&#xff08;Shape&#xff09;&#xff0c;包含受保护成员属性&#xff1a;周长、面积&#xff0c; 公共成员函数&#xff1a;特殊成员函数书写 定义一个圆形类&#xff08;Circle&#xff09;&#xff0c;继承自图形类&#xff0c;包含私有属性&#xf…

蓝蓝设计为教育行业提供软件UI交互设计服务

在教育行业&#xff0c;软件的用户体验设计对于提供优质教育体验至关重要。教育行业软件用户体验设计需要考虑到学生和教师的需求&#xff0c;以及教育环境的特殊性。为了确保设计的成功&#xff0c;选择一家专业的设计公司是至关重要的&#xff0c;而北京蓝蓝设计公司就是您的…

X86_64函数调用汇编程序分(2)

X86_64函数调用汇编程序分&#xff08;2&#xff09; 1 X86_64寄存器使用标准2 leaveq和retq指令2.1 leaveq2.2 retq 3 执行leaveq和retq之后栈的结构3.1 执行leaveq之后栈的结构3.1.1 test_fun_b函数执行leaveq之前的栈结构示意图3.1.2 test_fun_b函数执行leaveq之后的栈结构示…