目录
什么是集合?
集合
- Python语言提供的内置数据结构
- 与列表、字典一样都属于可变类型的序列
- 集合是没有value的字典
一、集合的创建
(1)集合的创建
- 用{ }进行创建
- 用内置函数set()进行创建
注意:在集合中,空集合的创建不能够直接使用{}进行创建,这样创建出来的空集合不是集合类型,而是字典类型。故空集合的创建是使用set()内置函数进行创建。
示例:
# 第一种创建方式
s = {1, 2, 3, 3, 4, 5, 6, 7}
print(s, type(s))
# 第二种创建方式
s1 = set(range(6)) # 根据范围进行集合的创建
print(s1)
s2 = set([1, 23, 34, 12, 23]) # 将列表转换为为集合
print(s2, type(s2))
s3 = set((3, 23, 345, 32)) # 将元组转换为集合
print(s3, type(s3))
s4 = set('Python') # 将字符串转换为集合
print(s4, type(s4))
s5 = set({1, 23, 24, 25, 21})
print(s5, type(s5)) # 集合的创建
# 空集合的创建
s6 = {}
print(s6, type(s6)) # 直接使用{}进行创建,其类型为字典
s7 = set({})
print(s7, type(s7)) # 空集合
运行结果:
(2)集合生成式
集合生成式即生成集合的表达式
示例:
lst = [i for i in range(8)] # 列表生成式
print(lst)
s = {i for i in range(8)} # 集合生成式
print(s)
运行结果:
二、集合的相关操作
(1)集合元素的判断
利用in或not in判断元素是否存在于集合中
示例:
s = {12, 13, 23, 25, 30}
print('------------集合元素的判断------------')
print(23 in s)
print(35 in s)
print(23 not in s)
print(35 not in s)
运行结果:
(2)集合元素的增加
- 调用add( )方法,一次去添加一个元素
- 调用update( )方法至少添加一个元素
- 使用update( )增加元素时除了可以添加集合外,还可以添加列表、元组
(3)集合元素的删除
- 调用remove()方法,一次删除一个指定元素,如果指定元素不存在抛出KeyError
- 调用discard()方法,一次删除一个指定元素,如果指定元素不存在不抛出异常
- 调用pop()方法,一次只删除一个任意元素(pop()中是没有参数的,如果添加参数则会抛出异常)
- 调用clear()方法,清空集合
示例:
s = {12, 13, 23, 25, 30}
print('-------------集合元素的增加操作-----------')
# 添加单个元素
s.add(45)
print(s)
# 添加多个元素
s.update({100, 200, 300}) # 添加集合中的元素
print(s)
s.update([120, 150, 180]) # 添加列表中的元素
print(s)
s.update((210, 240, 270)) # 添加元组中的元素
print(s)
print('--------------集合中的删除操作-----------')
s.remove(100) # 删除单个元素(指定元素)
print(s)
"""s.remove(289)
print(s)""" # 当删除集合中的元素不存在时,运行结果会抛出异常
s.discard(210) # 删除单个元素(指定元素)
print(s)
s.discard(289) # 当删除集合中的元素不存在时,不会抛出异常
print(s)
s.pop() # 删除集合中任意一个元素,pop()不能含有参数,否则运行结果会抛出异常
print(s)
s.clear() # 清空集合
print(s)
运行结果:
三、集合间的关系
两个集合是否相等
- 可以使用运算符==或!=进行判断
一个集合是否是另一个集合的子集
- B是A的子集
- 可以调用方法issubset进行判断
一个集合是否是另一个集合的超集
- A是B的超集
- 可以调用方法issuperset进行判断
两个集合是否没有交集
- 可以调用方法isdisjoint进行判断(若有交集则为False,没有交集则为True)
示例:
print('----------判断集合是否相等----------')
s = {10, 20, 30, 40, 50, 60, 70}
s1 = {20, 30, 10, 50, 70, 40, 60}
print(s == s1)
print(s != s1)
'''判断一个集合是否是另一个集合的子集,是子集结果为True,不是子集结果为False'''
s2 = {10, 20, 30, 40, 50, 60}
s3 = {20, 30, 40, 60}
s4 = {10, 20, 30, 70}
print(s3.issubset(s2))
print(s4.issubset(s2))
'''判断一个集合是否是另一个集合的超集,是超集结果为True,不是结果为False'''
print(s2.issuperset(s3))
print(s2.issuperset(s4))
'''判断两个集合是否有交集,如果存在交集,则结果为False,否则为True'''
s5 = {100, 200, 300}
print(s2.isdisjoint(s3))
print(s2.isdisjoint(s4))
print(s3.isdisjoint(s4))
print(s2.isdisjoint(s5))
运行结果:
四、集合的数据操作
集合中的数学操作类似于数学中的集合的相关知识
交集、并集、差集、对称差集
交集:用intersection或者&去进行表达
并集:用union或者|去进行表达
差集:用difference或者-去进行表达
对称差集:用symmetric_difference或者^去进行表达
示例:
s = {10, 20, 30, 40}
s1 = {20, 30, 50, 60}
print('--------交集--------')
print(s.intersection(s1))
print(s & s1)
print('---------并集-------')
print(s.union(s1))
print(s | s1)
print('---------差集-------')
print(s.difference(s1))
print(s - s1)
print('---------对称差集---------')
print(s.symmetric_difference(s1))
print(s ^ s1)
运行结果: