(小甲鱼python)集合笔记合集一 集合(上)总结 集合的简单用法 集合的各种方法合集:子、交、并、补、差、对称差集、超集

一、基础复习

集合与字典区别

集合中所有元素都是独一无二的,并且也是无序的。
集合具有唯一性、无序性、有限性

>>> type({})           #字典
<class 'dict'>
>>> type({"one"})     #集合
<class 'set'>
>>> type({"one":1})   #字典
<class 'dict'>

二、集合的简单用法

1.集合创建的三种方法

#第一种是花括号里面传入多个元素
>>> {"FishC","Python"}
{'Python', 'FishC'}

#第二种是集合推导式
>>> {s for s in "FishC"}    # 集合中元素是无序的
{'s', 'i', 'F', 'C', 'h'}

#第三种是 set()方法
#这里源码是set(iterable),所以传入的"FishC"会被看作是可迭代对象进行迭代,而不是单个字符串
>>> set("FishC")
{'s', 'i', 'F', 'C', 'h'}

2.集合是无序的,不能通过下标索引访问

>>> s=set("FishC")
>>> s[0]
Traceback (most recent call last):
  File "<pyshell#10>", line 1, in <module>
    s[0]
TypeError: 'set' object is not subscriptable

3.判断某一元素是否在集合中

>>> set("FishC")
{'s', 'i', 'F', 'C', 'h'}
>>> 'C' in s
True
>>> 'c' in s   #字符不在集合中
False

4.访问集合元素
迭代方式访问

>>> set("FishC")
{'s', 'i', 'F', 'C', 'h'}
>>> for each in s:
	print(each)

s
i
F
C
h

5.集合唯一性的几种用法
对列表重复元素进行去重,判断列表是否有重复元素

>>> set([1,1,2,3,5])     #对列表重复元素进行去重
{1, 2, 3, 5}
>>> 
>>> s=[1,1,2,3,5]    #判断列表是否有重复元素
>>> len(s)==len(set(s))
False

6.集合的浅拷贝

>>> s=[1,1,2,3,5]
>>> t=s.copy()
>>> t
[1, 1, 2, 3, 5]

三、 集合的各种方法合集:子、交、并、补、差、对称差集

1.集合的浅拷贝

>>> s=[1,1,2,3,5]
>>> t=s.copy()
>>> t
[1, 1, 2, 3, 5]

2.判断两个集合是否毫不相关
s.isdisjoint(other) 如果 s 集合中没有与 other 容器存在共同的元素,那么返回 True,否则返回 False

>>> s=set("FishC")
>>> s
{'s', 'i', 'F', 'C', 'h'}
>>> s.isdisjoint(set("Python"))  #返回False说明它们相关,有公共的h
False
>>> s.isdisjoint(set("JAVA"))     #两集合无关
True
>>> 
>>> s.isdisjoint("JAVA")     # 传入字符串,显然与集合无关
True
>>> s.isdisjoint("Python")   #传入字符串,显然与集合相关
False

3.子集
子集:对于两个集合 A、B,如果集合 A 中任意一个元素都是集合 B 中的元素,我们就说这两个集合有包含关系,称集合 A 为集合 B 的子集(Subset)

>>> set("FishC")
{'s', 'i', 'F', 'C', 'h'}
>>> s.issubset("FishC.com.cn")
True
>>> s.issuperset("Fish")
True

使用运算符,符号两边都必须是集合类型的数据才行,否则会报错,错误用法:

>>> set("FishC")
{'s', 'i', 'F', 'C', 'h'}
>>> s<="FishC"
Traceback (most recent call last):
  File "<pyshell#58>", line 1, in <module>
    s<="FishC"
TypeError: '<=' not supported between instances of 'set' and 'str'
>>> 

运算符方法检测: 真集使用小于号 <

>>> s <=set("FishC")    #真集
True
>>> s<set("Fish")  
False
>>> s<set("FishC")
False
>>> s<set("FishC.com.cn")    #真子集
True

4.并集
并集:对于两个集合 A、B,把他们所有的元素合并在一起组成的集合,叫做集合 A 与集合 B 的并集(Union)。

>>> set("FishC")
{'s', 'i', 'F', 'C', 'h'}
>>> s.union({1,2,3})
{1, 2, 3, 'C', 's', 'h', 'i', 'F'}

>>> s.union({1,2,3},"python")
{'y', 1, 2, 3, 's', 'F', 'p', 'i', 't', 'n', 'C', 'o', 'h'}

运算符方法检测:并集使用管道符
这条竖线 | 称为管道符

>>> s | {1,2,3} | set("Python")
{'y', 1, 2, 3, 'P', 's', 'i', 'F', 't', 'n', 'C', 'o', 'h'}

5.交集

交集:对于两个集合 A、B,由所有属于集合 A 且属于集合 B 的元素所组成的集合,叫做集合 A 与集合 B 的交集(Intersection)。

>>> set("FishC")
{'s', 'i', 'F', 'C', 'h'}
>>> s.intersection("Fish")
{'h', 'i', 'F', 's'}

>>> s.intersection("Php","Python")
{'h'}

运算符方法检测:交集使用&符号

>>> s & set("Php") & set("Python")
{'h'}

5.差集
差集:对于两个集合 A、B,由所有属于集合 A 且不属于集合 B 的元素所组成的集合,叫做集合 A 与集合 B 的差集(Difference)。

>>> set("FishC")
{'s', 'i', 'F', 'C', 'h'}
>>> s.difference("Fish")
{'C'}

>>> s.difference("Php","Python")
{'C', 's', 'i', 'F'}

运算符方法检测:差集使用减号 -

>>> s - set("Php") - set("Python")
{'i', 'C', 'F', 's'}

6.对称差集
s.symmetric_difference(other) 返回一个新集合,其内容是排除掉 s 集合和 other 容器中共有的元素后,剩余的所有元素。

>>> s.symmetric_difference("Python")
{'y', 'P', 's', 'i', 't', 'F', 'n', 'C', 'o'}

运算符方法检测:对称差集使用脱字符 ^

>>> s ^ set("Python")
{'y', 'P', 's', 'F', 'i', 't', 'n', 'C', 'o'}

7.超集
使用运算符判断集合大小

>>> s>set("FishC")    #真超集
False
>>> s>=set("FishC")  #超集
True

四、 集合的其他用法

集合中元素的基本操作 删除、添加、更新等 可变集合set()和不可变集合frozenset() 集合的可哈希等等frozenset()集合的嵌套等等知识点。

课后题:
1.如果存在多个列表,需要筛出这些列表中相同的元素,可以使用什么方法?
答:将它们转换为集合,然后进行交集运算,得出的结果便是它们之间共同拥有的元素。
解析:

>>> # 方法一
>>> l1 = [1, 2, 3, 4, 5]
>>> l2 = [1, 3, 5, 7, 9]
>>> l3 = [1, 1, 2, 3, 5]
>>> set(l1).intersection(l2, l3)
{1, 3, 5}
>>> # 方法二
>>> set(l1) & set(l2) & set(l3)
{1, 3, 5}

2.请问下面代码的执行结果是?

>>> s1 = set("fishc.com.cn")
>>> s2 = set("ilovefishc.com")
>>> s1 - s2

答:{‘n’}
解析:集合之间使用减号(-)运算符,执行的是差集运算(就是找出存在于该集合,但不存在于其它集合中的元素),也可以使用 s1.difference(s2) 得到等值的结果。
3.请问下面三个图形中,A 和 B 通过什么操作会变成 C?
A.在这里插入图片描述B.在这里插入图片描述C.在这里插入图片描述答:对称差集。
解析:相当于偶数次重叠的有,奇数次重叠的没有。

题目来自小甲鱼 集合(上)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值