Python3学习8 集合及其常用方法

集合 set

元素不重复,无序
不能被切片、索引
列表和字典不能在集合中

一、集合的创建

s = set([12, 34, 56])
print(s)
print(type(s))
"""输出:
{56, 34, 12}
<class 'set'>
"""

若有重复元素,会自动去重

s1 = {23, 4, True, 'a', 65, 65, 78, 89, 10}
print(s1)  # {65, True, 4, 10, 78, 23, 89, 'a'}

若是字符串

s2 = set('abc')
print(s2)  # {'c', 'a', 'b'}

创建空集合

s2 = set()
print(s2)
print(type(s2))
"""输出:
set()
<class 'set'>
"""

二、集合的运算

s1 = set('abcdefg')
s2 = set('efghijklmn')

差集:

# 方法1
print(s1 - s2) 
# 方法2
print(s1.difference(s2))
"""输出
{'a', 'd', 'b', 'c'}
{'a', 'd', 'b', 'c'}
"""

并集:

# 方法1
print(s1 | s2)
# 方法2 
print(s1.union(s2))
"""输出:
{'b', 'j', 'm', 'g', 'n', 'c', 'd', 'f', 'a', 'k', 'l', 'e', 'i', 'h'}
{'b', 'j', 'm', 'g', 'n', 'c', 'd', 'f', 'a', 'k', 'l', 'e', 'i', 'h'}
"""

交集:

# 方法1
print(s1 & s2) 
# 方法2
print(s1.intersection(s2))
"""输出:
{'f', 'e', 'g'}
{'f', 'e', 'g'}
"""

对称差:

# 方法1
print(s1 ^ s2)
# 方法2 
print(s1.symmetric_difference(s2)) 
"""输出:
{'n', 'h', 'k', 'l', 'b', 'm', 'c', 'j', 'd', 'i', 'a'}
{'n', 'h', 'k', 'l', 'b', 'm', 'c', 'j', 'd', 'i', 'a'}
"""

intersection_update():返回一个新集合,新集合元素既包含在集合1 又包含在集合2中

s1.intersection_update(s2)
print(s1)  # {'g', 'e', 'f'}

symmetric_difference_update():在集合1中移除与集合2中的重复元素,然后将不重复的元素添加到集合1中

s1.symmetric_difference_update(s2)
print(s1)  # {'h', 'n', 'j', 'd', 'l', 'b', 'm', 'c', 'a', 'i', 'k'}

difference_update():移除两个集合都包含的元素

s1.difference_update(s2)
print(s1)  # {'b', 'd', 'a', 'c'}

三、集合的增加

add

只允许添加一个元素

s1 = {2, 3, 4}
s1.add(5)
print(s1)  # {2, 3, 4, 5}

update

可将多个集合元素更新到另一个集合中

s1 = {3, 4, 2}
s2 = {5, 6}
s1.update(s2, {45, 34}, {7, 8, 9})
print(s1)  # {2, 3, 4, 5, 6, 34, 8, 9, 7, 45}

四、集合的删除

remove 删除指定元素,如元素不存在则会报错
pop 随机删除一个元素
discard 删除指定元素,如元素不存在,不进行任何处理返回原集合
clear 清空集合
例:

s1 = {12, 3, 74, 34, 654,54}

remove()

s1.remove(12)
print(s1)  # {34, 3, 74, 654, 54}

pop()

s1 = {12, 3, 74, 34, 654,54}
print(s1, s1.pop())
print(s1, s1.pop())
"""输出:
{3, 74, 12, 654, 54} 34
{74, 12, 654, 54} 3
"""

discard()

s1 = {12, 3, 74, 34, 654,54}
s1.discard(122)
print(s1)  # {34, 3, 74, 12, 654, 54}
s1.discard(12)
print(s1)  # {34, 3, 74, 654, 54}

clear()

s1.clear()
print(s1)  # set()

五、判断

isdisjoint 判断有无交集,有交集返回False 无交集返回True

s1 = {12, 34, 45}
s2 = {34, 67, 89}
print(s1.isdisjoint(s2)) # False
s3 = {66, 67, 89}
print(s1.isdisjoint(s3)) # True

子序列,父序列

s1 = {12, 34, 45}
s2 = {12, 34}
print(s2.issubset(s1))  # True
print(s1.issuperset(s2))  # True  
s3 = {22, 34}
print(s3.issubset(s1))  # False
print(s1.issuperset(s3))  # False
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值