集合(set)
1. 什么是集合
集合是容器型数据类型,将{}作为容器标志里面多个元素用逗号隔开: {元素1, 元素2, 元素3,…}
可变的(支持增删改)、无序的(不支持下标操作)
集合中的元素: 不可变的,唯一的(自带去重)
# 1.空集合
# 注意: {}表示空字典
x = {}
print(type(x)) # <class 'dict'>
# set1是一个空集合
set1 = set()
# 2.集合中的元素
set2 = {1, 2, 'hus', (10, 2)}
print(set2)
# 集合中的元素不可变
# set3 = {[1, 2], 2, 'hus'} # TypeError: unhashable type: 'list'
# 集合中的元素是唯一的
set4 = {1, 2, 'hus', 1}
print(set4) # {1, 2, 'hus'}
2. 元素的增删改查
2.1 查 - 获取集合中的元素
集合只能通过遍历一个一个得取出所有的元素,没有办法单独取出指定的一个元素
set5 = {23, 3, 5, 67, 8}
for x in set5:
print(x)
2.2 增 - 添加元素
- 集合.add(元素) - 在集合中添加指定元素
- 集合.update(序列) - 将序列中的元素全部添加到集合中
set5 = {23, 3, 5, 67, 8}
set5.add(100)
print(set5) # {67, 3, 5, 100, 8, 23}
# 将字符串中的字符全部添加到集合中
set5.update('abc')
print(set5) # {67, 3, 5, 100, 8, 'b', 'a', 23, 'c'}
# 将字典中所有的key添加到集合中
set5.update({'name': '小明', 'age': 18})
print(set5) # {67, 3, 5, 100, 'age', 8, 'b', 'name', 'a', 23, 'c'}
2.3 删 - 删除元素
- 集合.remove(元素) - 删除集合中指定元素,元素不存在报错
- 集合.discard(元素) - 删除集合中指定元素, 元素不存在不报错
set5 = {67, 3, 5, 100, 'age', 8, 'b', 'name', 'a', 23, 'c'}
set5.remove(100)
print(set5) # {67, 3, 5, 'age', 8, 'b', 'name', 'a', 23, 'c'}
set5.discard(67)
print(set5) # {3, 5, 'age', 8, 'b', 'name', 'a', 23, 'c'}
set5.discard(1000) # 不会报错
3. 相关操作
3.1 in 和 not in
集合的 in 和 not in 判断的是元素是否存在
set5 = {23, 3, 5, 67, 8}
print(8 in set5)
3.2 len 和 set 函数
- len(集合) - 获取集合中 元素的个数
- set(序列) - 将指定的序列转换成集合(如果序列是字典是将字典的key作为集合的元素)
list1 = [10, 23, 10, 25, 30, 12, 23]
list1 = list(set(list1))
print(list1) # [10, 12, 23, 25, 30]
4. 数学集合运算
集合支持数学中的集合运算:并集(|), 交集(&), 差集(-), 对称差集(^), >/<(包含关系)
- 并集: 集合1 | 集合2 - 将两个集合合并在一起产生一个新的集合
- 交集: 集合1 & 集合2 - 获取两个集合的公共部分产生一个新的集合
- 差集:集合1 - 集合2 - 获取集合1中去掉集合2剩下的部分
- 对称差集:集合1 ^ 集合2 - 获取集合1和集合2合并后去掉公共部分剩下的部分
- 集合1 > 集合2 - 判断集合1中是否包含集合2
集合1 < 集合2 - 判断集合2中是否包含集合1
set1 = {1, 2, 3, 4, 5, 6}
set2 = {4, 5, 6, 7, 8}
# 1)并集: 集合1 | 集合2 -> 将两个集合合并在一起产生一个新的集合
print(set1 | set2) # {1, 2, 3, 4, 5, 6, 7, 8}
# 1)并集: 集合1 | 集合2 -> 将两个集合合并在一起产生一个新的集合
print(set1 | set2) # {1, 2, 3, 4, 5, 6, 7, 8}
# 3)差集: 集合1 - 集合2 -> 获取集合1中去掉集合2剩下的部分
print(set1 - set2) # {1, 2, 3}
print(set2 - set1) # {8, 7}
# 4)对称差集:集合1 ^ 集合2 -> 获取集合1和集合2合并后去掉公共部分剩下的部分
print(set1 ^ set2) # {1, 2, 3, 7, 8}
# 5) 集合1 > 集合2 - 判断集合1中是否包含集合2
# 集合1 < 集合2 - 判断集合2中是否包含集合1
set3 = {5, 6, 7, 8, 9}
set4 = {1, 2}
print(set3 > set4) # False
print(set3 > {5, 6}) # True
print(set3 > {5, 6, 1}) # False