python 工具

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