热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python集合(set)介绍

集合set集合是可变的容器集合内的数据对象都是唯一的(不能重复多次的)集合是无序的存储结构,集合中的数据没有先后关系集合内的元素必须是不可

集合 set

集合是可变的容器

集合内的数据对象都是唯一的(不能重复多次的)

集合是无序的存储结构,集合中的数据没有先后关系

集合内的元素必须是不可变对象

集合是可迭代对象(可以用for等遍历)

集合是相当于只有键,没有值的字典(键则是集合的数据)

创建空集合:

set()

创建非空集合的字面值:

s = {1,2,3}

集合的构造函数:set

set() # 创建一个空的集合对象(不能用{}来创建空集合)
set(iterable) # 用可迭代对象创建一个新的集合对角

# 示例:
s = set()
s = {1,2,3,4}
s = set("ABC")
s = set("ABCABC") # s = {"A","B","C"}
s = set([1,0,3.14,0.618])
s = {1,2,[3,4],5} #报错,集合内不能放列表和字典
s = {1,2,{3,4},5} #出错集合是可变对象

集合的运算:

交集&&#xff0c;并集|&#xff0c;补集-&#xff0c;对称补集^ , 子集<,超集>

# & 运算符生成两个集合的交集(两个集合的共同部分)
s1 &#61; {1,2,3}
s2
&#61; {2,3,4}
s3
&#61; s1 & s2 #s3&#61;{2,3} # | 生成两个集合的并集
s1 &#61; {1,2,3}
s2
&#61; {2,3,4}
s3
&#61; s1 | s2 #s3 &#61;{1,2,3,4}# - 生成两个集合的补集
s1 &#61; {1,2,3}
s2
&#61; {2,3,4}
s3
&#61; s1 - s2 #生成属于s1&#xff0c;但不属于s2的所有元素的集合# ^ 生成两个集合的对称补集
s1 &#61; {1,2,3}
s2
&#61; {2,3,4}
s3
&#61; s1 ^ s2 #s3 &#61;{1,4} # > 判断一个集合是另一个集合的超集
#
<判断一个集合是另一个集合的子集
s1 &#61; {1,2,3}
s2
&#61; {2,3}
s1
> 2s # True, s1为s2的超集
s2 # True&#xff0c;s2为s1的子集# &#61;&#61; !&#61; 集合相同或不同
s1 &#61; {1,2,3}
s2
&#61; {2,3,1}
s1
&#61;&#61; s2 #True 相同
s1 !&#61; s1 #False # >&#61; <&#61; 超集或相同&#xff0c;子集或相同

练习

# 1.经理有&#xff1a;曹操&#xff0c;刘备&#xff0c;孙权
#
技术员有&#xff1a;曹操&#xff0c;孙权&#xff0c;张飞&#xff0c; 关羽
#
用集合求&#xff1a;
#
1. 即是经理也是技术员的有谁&#xff1f;
#
2. 是经理&#xff0c;但不是技术人员的都有谁&#xff1f;
#
3. 是技术人员&#xff0c;但不是经理的人都有谁&#xff1f;
#
4. 张飞是经理吗&#xff1f;
#
5. 身兼一职的人都有谁&#xff1f;
#
6. 经理和技术人员共有几个人&#xff1f;
l &#61; {"曹操","刘备","孙权"}
j
&#61; {"曹操","孙权","张飞","关羽"}
print("即经理也是技术员的有:",l&j,)
print("是经理&#xff0c;但不是技术人员的有",l-j)
print("是技术人员&#xff0c;但不是经理的有",j-l)
if "张飞" in l:
  print("是经理")
else:
  print("张飞&#xff0c;不是经理")
print("身兼一职的人&#xff1a;",l^j)
print("经理和技术人员共有",len(l|j))

集合的方法&#xff1a;

# 方法      # 意义
S.add(e)        # 在集合中添加一个新的元素e&#xff1b;如果元素已经存在&#xff0c;则不添加
S.remove(e)        # 从集合中删除一个元素&#xff0c;如果元素不存在于集合中&#xff0c;则会产生一个KeyError错误
S.discard(e)         # 从集合S中移除一个元素e,在元素e不存在时什么都不做;
S.clear()       # 清空集合内的所有元素
S.copy()        # 将集合进行一次浅拷贝
S.pop()        # 从集合S中删除一个随机元素;如果此集合为空&#xff0c;则引发KeyError异常
S.update(s2)        # 等同于 S l&#61; s2, 用 S与s2得到的全集更新变量S
S.difference(s2)        # S - s2 补集运算&#xff0c;返回存在于在S中&#xff0c;但不在s2中的所有元素的集合
S.difference_update(s2)     # 等同于 S -&#61; s2
S.intersection(s2)         # 等同于 S & s2
S.intersection_update(s2)       # 等同于S &&#61; s2
S.isdisjoint(s2)            # 如果S与s2交集为空返回True,非空则返回False
S.issubset(s2)             # 如果S与s2交集为非空返回True,空则返回False
S.issuperset(...)             # 如果S为s2的超集返回True,否则返回False
S.symmetric_difference(s2)      # 返回对称补集, 等同于 S ^ s2
S.symmetric_difference_update(s2) # 等同于 S ^&#61; s2, 用 S 与 s2 的对称补集更新 S
S.union(s2)           # 生成 S 与 s2的全集, 等同于 S \
# 集合是可迭代对象

集合推导式

集合推导式是用可迭代对象创建集合的表达式

# 语法&#xff1a;
#
{表达式 for 变量 in 可迭代对象 [if 真值表达式]}
#
示例&#xff1a;
#
s &#61; {x**2 for x in range(1,10)}
#
集合推导式可以嵌套
#
语法用列表推导式的嵌套相同

固定集合 frozenset&#xff08;原封集合&#xff09;

固定集合是不可变的&#xff0c;无序的&#xff0c;含有唯一元组的集合

# 作用&#xff1a;
#
固定集合可以作为字典的键&#xff0c;还可以作为集合的值&#xff08;可以放固定键&#xff09;
#
创建固定集合构造函数 frozenset
frozenset&#xff08;&#xff09;# 创建一个空的固定集合对象
frozenset&#xff08;iterable&#xff09;# 用可迭代对象创建一个新的固定集合对象fz
&#61; frozenset&#xff08;&#xff09;
fz
&#61; frozenset (range(10))
fz
&#61; frozenset ([1,3,8,6,9])
d
&#61; {frozenset({1,2,3}):"集合1,2,3"}

固定集合的运算&#xff1a;

# &交集 | 并集 -补集 ^对称补集 <子集 >超集
#
<&#61; >&#61; &#61;&#61; !&#61;
#
in / not in
#
(以上运算规则等用于set中的规则)

固定集合的方法&#xff1a;

相当于集合的全部方法去掉修改集合的方法

python基础总结

阶段总结

# 数据类型&#xff1a;
#
不可变类型&#xff1a;
#
数字&#xff1a;bool&#xff0c;int&#xff0c;float&#xff0c;complex&#xff08;复数&#xff09;
#
容器&#xff1a;str&#xff0c;tulpe&#xff0c;frozenset&#xff0c;bytes&#xff08;备留&#xff09;
#
可变类型
#
list&#xff0c;dict&#xff0c;set&#xff0c;bytearray&#xff08;备留&#xff09;
#
值&#xff1a;
#
None&#xff0c;False&#xff0c;True

# 表达式&#xff1a;
#
1 1 &#43;1
#
print("hello")
#
max("ABC")&#43;min("123")
#
条件表达式&#xff1a;x if x > y else y # 全部的推导式&#xff1a;
#
列表&#xff0c;字典&#xff0c;集合推导式# 语句&#xff1a;
#
表达式语句&#xff1a;
#
print("hello")
#
"""ABCD""""# 赋值语句&#xff1a;
#
a &#61; 100
#
a &#61; b &#61; c &#61; 200
#
x&#xff0c;y &#61; 100,200
#
L[1] &#61; 200
#
d["key"] &#61; "键"# del语句&#xff08;删除&#xff09;
#
if 语句&#xff08;如果&#xff09;elif else:
#
while语句(循环)
#
for 语句&#xff08;固定循环&#xff09;
#
break语句&#xff08;结束循环&#xff09;
#
continue语句&#xff08;重新执行循环&#xff09;
#
pass语句

内建函数

# 容器相关
len&#xff08;x&#xff09;&#xff0c;max&#xff08;x&#xff09;&#xff0c;min&#xff08;x&#xff09;&#xff0c;sum&#xff08;x&#xff09;&#xff0c;any&#xff08;x&#xff09;&#xff0c;all&#xff08;x&#xff09;# 构造函数&#xff1a;
bool(x) int(x) float(x) complex(r&#61;0.0,i &#61; 0.0)
str(x) list(x) tuple(x) dict(x) set(x) frozenset(x)
# 数值型 函数:
abs(x) round(x) pow(x,y,z&#61;None) 幂运算# 字符串相关
bin(x) oct&#xff08;x&#xff09; hex&#xff08;x&#xff09; chr&#xff08;x&#xff09; 数字 ord&#xff08;x&#xff09; 编码# 可迭代对象相关
range&#xff08;start,stop,step&#xff09; reversed(x) sorted(x,reverse&#61;False)# 输入输出相关&#xff1a;
input(x) print(...)# 其它&#xff1a;
type&#xff08;x&#xff09; id&#xff08;x&#xff09;


转载于:https://www.cnblogs.com/Axianba/p/11133327.html


推荐阅读
  • 浅析python实现布隆过滤器及Redis中的缓存穿透原理_python
    本文带你了解了位图的实现,布隆过滤器的原理及Python中的使用,以及布隆过滤器如何应对Redis中的缓存穿透,相信你对布隆过滤 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • 探索聚类分析中的K-Means与DBSCAN算法及其应用
    聚类分析是一种用于解决样本或特征分类问题的统计分析方法,也是数据挖掘领域的重要算法之一。本文主要探讨了K-Means和DBSCAN两种聚类算法的原理及其应用场景。K-Means算法通过迭代优化簇中心来实现数据点的划分,适用于球形分布的数据集;而DBSCAN算法则基于密度进行聚类,能够有效识别任意形状的簇,并且对噪声数据具有较好的鲁棒性。通过对这两种算法的对比分析,本文旨在为实际应用中选择合适的聚类方法提供参考。 ... [详细]
  • 最大化两个非空子集之间的和的差异:集合划分策略分析 ... [详细]
  • 人脸识别中的损失函数
    本文主要是针对人脸识别中的各种loss进行总结。 背景对于分类问题,我们常用的lossfunction是softmax,表示为:,当然有softmax肯定也有hardmax:,so ... [详细]
  • 在使用 Cacti 进行监控时,发现已运行的转码机未产生流量,导致 Cacti 监控界面显示该转码机处于宕机状态。进一步检查 Cacti 日志,发现数据库中存在 SQL 查询失败的问题,错误代码为 145。此问题可能是由于数据库表损坏或索引失效所致,建议对相关表进行修复操作以恢复监控功能。 ... [详细]
  • 深入解析C语言中结构体的内存对齐机制及其优化方法
    为了提高CPU访问效率,C语言中的结构体成员在内存中遵循特定的对齐规则。本文详细解析了这些对齐机制,并探讨了如何通过合理的布局和编译器选项来优化结构体的内存使用,从而提升程序性能。 ... [详细]
  • MyISAM和InnoDB是MySQL中最为广泛使用的两种存储引擎,每种引擎都有其独特的优势和适用场景。MyISAM引擎以其简单的结构和高效的读取速度著称,适用于以读操作为主、对事务支持要求不高的应用。而InnoDB引擎则以其强大的事务处理能力和行级锁定机制,在需要高并发写操作和数据完整性的场景下表现出色。选择合适的存储引擎应综合考虑业务需求、性能要求和数据一致性等因素。 ... [详细]
  • 计算机视觉领域介绍 | 自然语言驱动的跨模态行人重识别前沿技术综述(上篇)
    本文介绍了计算机视觉领域的最新进展,特别是自然语言驱动的跨模态行人重识别技术。上篇内容详细探讨了该领域的基础理论、关键技术及当前的研究热点,为读者提供了全面的概述。 ... [详细]
  • 本文深入探讨了CGLIB BeanCopier在Bean对象复制中的应用及其优化技巧。相较于Spring的BeanUtils和Apache的BeanUtils,CGLIB BeanCopier在性能上具有显著优势。通过详细分析其内部机制和使用场景,本文提供了多种优化方法,帮助开发者在实际项目中更高效地利用这一工具。此外,文章还讨论了CGLIB BeanCopier在复杂对象结构和大规模数据处理中的表现,为读者提供了实用的参考和建议。 ... [详细]
  • Java 模式原型在游戏服务器架构中的应用与优化 ... [详细]
  • Node.js 中的椭圆曲线 Diffie-Hellman 密钥交换方法 `crypto.createECDH()` 使用详解 ... [详细]
  • 本讲深入探讨了 Python 中集合的基本概念及其符号表示方法,通过实例代码详细解析了如何将列表转换为集合,并展示了集合在数据处理中的独特优势。 ... [详细]
  • Python之基础篇(三)
    基础篇之三:一,数据类型之set.总结:set无序,不重复。1,创建set:s{1,2,3}print(s,type(s))list1[1,2,3]s1(list1)prin ... [详细]
  • 本文将继续探讨 JavaScript 函数式编程的高级技巧及其实际应用。通过一个具体的寻路算法示例,我们将深入分析如何利用函数式编程的思想解决复杂问题。示例中,节点之间的连线代表路径,连线上的数字表示两点间的距离。我们将详细讲解如何通过递归和高阶函数等技术实现高效的寻路算法。 ... [详细]
author-avatar
手机用户2502936007
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有