Python 集合(Set)
集合是一个无序的不重复元素序列,元素必须是不可变的
集合中的元素不会重复,并且可以进行交集、并集、差集等常见的集合操作
可以使用大括号 { } 创建集合,元素之间用逗号 , 分隔, 或者也可以使用 set() 函数创建集合
语法:变量名 = 集合常量/集合类型变量
set1 = {1, 2, 3, 4}
set2 = set1
# 创建空集合,不能使用{},因为{}是创建空字典
set3 = set()
1. 修改集合元素
[1] 添加元素
set1 = set()
# add(obj) obj只能是不可变元素
set1.add(1) # {1}
set1.add((2, 3)) # {1, (2, 3)}
# update(obj)
# obj必须是字符串、列表、元组、字典、集合等可迭代对象
# 会将obj中的每一项元素依次添加到集合中,每一项元素只能是不可变元素
# 当obj为字典时,将键依次添加到集合中
# obj可以有多个,用 ',' 隔开
set2 = set()
set2.update([1, 2], (3, 4)) # {1, 2, 3, 4}
set2.update('abc') # {'b', 1, 2, 3, 4, 'a', 'c'}
set2.update({'姓名': '小明', '年龄': '20'}) # {'c', 1, 2, 3, 4, 'b', 'a', '年龄', '姓名'}
set2.update(20) # 报错
[2] 删除元素
set3 = {1, 2, 3, 4, 5}
# remove(obj) 将obj从集合中删除,如果不存在则会报错
set3.remove(2) # {1, 3, 4, 5}
set3.remove(6) # 报错
# discard(obj) 将obj从集合中删除,不存在不会报错
set3.discard(6) # 不报错
# pop() 删除集合里的第一个元素,由于集合排序的随机性,删除哪个元素有不确定性
set4 = {"Google", "Taobao", "Facebook"}
s = set4.pop() # 多次测试结果不一样
# 清空集合
set4.clear() # set4 = set()
2. 集合运算
set1 = {1, 2, 3, 4}
set2 = {1, 2, 5}
[1] 交集
# intersection(obj) 返回两个集合的交集
set3 = set1.intersection(set2) # set3 = {1, 2}
# 按位与运算符 &
set3 = set1 & set2 # set3 = {1, 2}
# intersection_update(obj) 将原集合更新为两个集合的交集
set1.intersection_update(set2) # set1 = {1, 2}
[2] 并集
# union(obj) 返回两个集合的并集
set3 = set1.union(set2) # set3 = {1, 2, 3, 4, 5}
# 按位或运算符 |
set3 = set1 | set2 # {1, 2, 3, 4, 5}
[3] 差集
# difference(obj) 返回两个集合的差集
set3 = set1.difference(set2) # set3 = {3, 4}
# 减号运算符 -
set3 = set1 - set2 # set3 = {3, 4}
# difference_update(obj) 将原集合更新为两个集合的差集
set1.difference_update(set2) # set1 = {3, 4}
[4] 对称差集
# symmetric_difference(obj) 返回两个集合的对称差集
set3 = set1.symmetric_difference(set2) # set3 = {3, 4, 5}
# 按位异或运算符(相同为0相异为1)
set3 = set1 ^ set2 # set3 = {3, 4, 5}
# symmetric_difference_update(obj) 将原集合更新为两个集合的对称差集
set1.symmetric_difference_update(set2) # set1 = {3, 4, 5}
3. 集合常用函数
| 序号 |
函数 |
描述 |
| 1 |
set.add(obj) |
为集合添加元素 |
| 2 |
set.remove(obj) |
移除指定元素,如果元素不存在会报错 |
| 3 |
set.pop() |
随机最后一位元素 |
| 4 |
set.discard(obj) |
删除集合中指定的元素,元素不存在不会报错 |
| 5 |
set.clear() |
移除集合中的所有元素 |
| 6 |
set.copy() |
浅拷贝一个集合 |
| 7 |
set.intersection(obj) |
返回集合的交集 |
| 8 |
set.intersection_update(obj) |
将原集合更新为两个集合的交集 |
| 9 |
set.difference(obj) |
返回多个集合的差集 |
| 10 |
set.difference_update(obj) |
移除集合中的元素,该元素在指定的集合也存在 |
| 11 |
set.symmetric_difference(obj) |
返回两个集合中不重复的元素集合 |
| 12 |
isdisjoint(obj) |
判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False |
| 13 |
issubset(obj) |
判断指定集合是否为该方法参数集合的子集 |
| 14 |
issuperset(obj) |
判断该方法的参数集合是否为指定集合的子集 |
| 15 |
value in set |
如果value在集合里返回True,否则返回False |