Python:集合的使用

"""
集合的使用
与数学上是一致的,不允许有重复的元素,而且可以进行交集,并集,差集等运算
"""

# 创建集合
set1 = {1, 2, 3, 4, 3, 2, 1}
print(set1)  # {1, 2, 3, 4} 自动去除重复元素

# 求长度
print('集合长度为', len(set1))  # 集合长度为 4

# 列表转集合
set2 = set(range(1, 10))
print(set2)  # {1, 2, 3, 4, 5, 6, 7, 8, 9}

# 集合添加元素(若重复便不会添加)
set1.add(4)
print(set1)  # {1, 2, 3, 4}
set1.add(5)
print(set1)  # {1, 2, 3, 4, 5}

# 集合添加元素
set2.update([11, 12])
print(set2)  # {1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12}

# 删除元素
set2.discard(5)
print(set2)  # {1, 2, 3, 4, 6, 7, 8, 9, 11, 12}

# set2.remove(5)
# print(set2)  # KeyError: 5  remove的元素不存在会引发

# 所以要先判断后删除...
if 4 in set2:
    set2.remove(4)
    print(set2)  # {1, 2, 3, 6, 7, 8, 9, 11, 12}

# 遍历集合中的元素
for i in set2:
    print(i, end=' ')  # 1 2 3 6 7 8 9 11 12
print()

# 将元组转换为集合
set3 = set((1, 3, 5, 7, 4, 2))
print(set3)  # {1, 2, 3, 4, 5, 7}

# 删除元素
print(set3.pop())  # 1
print(set3)  # {2, 3, 4, 5, 7}

'''
集合的交集、并集、差集、对称差运算

交集
intersection
英 [ˌɪntəˈsekʃn]   美 [ˌɪntərˈsekʃn]  
n.
十字路口;交叉路口;交点;横断;交叉;相交

并集
union
英 [ˈjuːniən]   美 [ˈjuːniən]  
n.
协会;联合会;会社;俱乐部;同盟;联盟;联邦;(尤指内战时期的)美利坚合众国,美国

差集
difference
英 [ˈdɪfrəns]   美 [ˈdɪfrəns]  
n.
差别;差异;不同(之处);变化(之处);差;差额;意见分歧;不和
vt.
辨别;区分

对称差分
symmetric_difference


'''
print('列表1', set1)  # {1, 2, 3, 4, 5}
print('列表2', set2)  # {1, 2, 3, 6, 7, 8, 9, 11, 12}

# 交集
print(set1 & set2)  # {1, 2, 3}
print(set1.intersection(set2))  # {1, 2, 3}

# 并集
print(set1 | set2)  # {1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12}
print(set1.union(set2))  # {1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12}

# 差集
print(set1 - set2)  # {4, 5}
print(set1.difference(set2))  # {4, 5}

# 对称差集 除去set1和set2的差集两个列表所有的元素
print(set1 ^ set2)  # {4, 5, 6, 7, 8, 9, 11, 12}
print(set1.symmetric_difference(set2))  # {4, 5, 6, 7, 8, 9, 11, 12}

'''
判断子集和超集

子集
subset

超集
superset

'''
# 是否为子集
print(set2 <= set1)  # False
print(set2.issubset(set1))  # False

'''是否为超集 
如果一个集合S2中的每一个元素都在集合S1中,
且集合S1中可能包含S2中没有的元素,
则集合S1就是S2的一个超集,
反过来,S2是S1的子集。 
S1是S2的超集,若S1中一定有S2中没有的元素,
则S1是S2的真超集,反过来S2是S1的真子集。
'''

print(set1 >= set2)  # False
print(set1.issuperset(set2))  # False


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值