热门标签 | 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


推荐阅读
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 本文讨论了一个数列求和问题,该数列按照一定规律生成。通过观察数列的规律,我们可以得出求解该问题的算法。具体算法为计算前n项i*f[i]的和,其中f[i]表示数列中有i个数字。根据参考的思路,我们可以将算法的时间复杂度控制在O(n),即计算到5e5即可满足1e9的要求。 ... [详细]
  • 本文为Codeforces 1294A题目的解析,主要讨论了Collecting Coins整除+不整除问题。文章详细介绍了题目的背景和要求,并给出了解题思路和代码实现。同时提供了在线测评地址和相关参考链接。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • This article discusses the efficiency of using char str[] and char *str and whether there is any reason to prefer one over the other. It explains the difference between the two and provides an example to illustrate their usage. ... [详细]
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社区 版权所有