集合 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