0%

Python 数据容器之Set集合

这里介绍Python数据容器的Set集合

abstract.png

创建集合

定义:使用花括号{}定义集合,用逗号分隔元素。特别地,创建空集合需使用set()而不能通过{}创建,因为后者用于创建字典

1
2
3
4
5
6
7
print("--------------- 集合定义 ---------------")
# 使用花括号{}定义集合,用逗号分隔元素
colors = {"red","blue","yellow","white","pink"}
# 创建空集合需使用set()而不能通过{}创建,因为后者用于创建字典
nums = set()
print("colors:", colors)
print("nums:", nums)

figure 1.png

基本操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
colors = {"red","blue","yellow","white","pink"}
print("--------------- 集合基本操作 ---------------")
# len函数: 获取集合中元素的数量
print("colors length:", len(colors))

# add方法: 添加元素
colors.add("green")
colors.add("blue")
print("add green and blue color: ", colors)

# remove方法: 将指定元素从集合中移除。如果该元素不存在,会报错
colors.remove("red")
print("remove red color: ", colors)

# discard方法: 将指定元素从集合中移除。如果该元素不存在,不会报错
colors.discard("blue")
colors.discard("black")
print("remove blue and black color: ", colors)

# pop方法:从集合中随机移除一个元素
colors.pop()
print("pop color: ", colors)

# clear方法:清空集合
colors.clear()
print("clear colors: ", colors)

figure 2.png

集合运算

元素是否存在于集合中

1
2
3
4
# 判断指定元素是否在集合中
names = {"Aaron", "Tony", "Bob"}
print("Bob 是否在 names 集合中:", "Bob" in names)
print("Wang 是否在 names 集合中:", "Wang" in names)

figure 3.png

交集

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# -------------------交集--------------------------------
names1 = {"Aaron", "Tony", "Bob", "Wang"}
names2 = {"Tony","Bob", "Cat"}
names3 = {"Amy", "Tony"}
# isdisjoint方法: 判断两个集合 是否 没有交集
print("names1、names2 是否 没有交集:", names1.isdisjoint(names2) )
# intersection方法: 计算多个集合的交集
print("names1、names2 的交集:", names1.intersection(names2))
print("names1、names2、names3 的交集:", names1.intersection(names2, names3))
# & 运算符 :计算交集
print("names1、names2、names3 的交集:", names1 & names2 & names3)

# intersection_update方法: 计算多个集合的交集,并将结果更新到方法的调用者集合中
names1.intersection_update(names2, names3)
print("after intersection_update names1:", names1)
print("after intersection_update names2:", names2)
print("after intersection_update names3:", names3)
names1 = {"Aaron", "Tony", "Bob", "Wang"}
names2 = {"Tony","Bob", "Cat"}
# &= 运算符 :计算交集,并将结果更新到操作符左侧的集合中
names1 &= names2
print("After &=, names1 : ", names1)
print("After &=, names2 : ", names2)

figure 4.png

并集

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# ------------------- 并集--------------------------------
names1 = {"Aaron", "Tony", "Bob", "Wang"}
names2 = {"Tony","Bob", "Cat"}
names3 = {"Amy", "Tony"}
# union方法:计算多个集合的并集
print("names1、names2、name3 的并集:", names1.union(names2, names3))
# | 运算符 :计算并集
print("names1、names2、name3 的并集:", names1 | names2 | names3)

# update方法:计算多个集合的并集,并将结果更新到方法的调用者集合中
names1.update(names2, names3)
print("After updpate, names1 : ", names1)
print("After updpate, names2 : ", names2)
print("After updpate, names3 : ", names3)
names1 = {"Aaron", "Tony", "Bob", "Wang"}
names2 = {"Tony","Bob", "Cat"}
# |= 运算符 :计算并集,并将结果更新到操作符左侧的集合中
names1 |= names2
print("After |=, names1 : ", names1)
print("After |=, names2 : ", names2)

figure 5.png

差集

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# ------------------- 差集--------------------------------
num1 = {996, 345, 128}
num2 = {345, 110, 120}
num3 = {996}
# diffference方法: 计算多个集合的差集
print("num1 与 num2、num3 的差集:", num1.difference(num2, num3))
# - 运算符 :计算差集
print("num1 与 num3 的差集:", num1 - num3)
print("num1 与 num2、num3 的差集:", num1 - num2 - num3)

# difference_update方法: 计算多个集合的差集,并将结果更新到方法的调用者集合中
num1.difference_update(num2,num3)
print("after difference_update num1:", num1)
print("after difference_update num2:", num2)
print("after difference_update num3:", num3)

num1 = {996, 345, 128}
num3 = {996}
# -= 运算符 :计算差集,并将结果更新到操作符左侧的集合中
num1 -= num3
print("After -=, num1 : ", num1)
print("After -=, num3 : ", num3)

figure 6.png

对称差集

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# ------------------- 对称差集--------------------------------
# 对称差集:两个集合中不重复的元素集合
num1 = {111, 222, 333,444,555}
num2 = {444, 555, 666, 777}
# symmetric_difference 方法:计算两个集合的对称差集
print("num1 与 num2 的对称差集:", num1.symmetric_difference(num2) )
# ^ 运算符 :计算对称差集
print("num1 与 num2 的对称差集:", num1 ^ num2)

# symmetric_difference_update方法: 计算两个集合的对称差集,并将结果更新到方法的调用者集合中
num1.symmetric_difference_update(num2)
print("after symmetric_difference_update num1:", num1)
print("after symmetric_difference_update num2:", num2)

num1 = {111, 222, 333,444,555}
num2 = {444, 555, 666, 777}
# ^= 运算符 :计算对称差集,并将结果更新到操作符左侧的集合中
num1 -= num2
print("After ^=, num1 : ", num1)
print("After ^=, num2 : ", num2)

figure 7.png

子集、真子集、超集、真超集判断

1
2
3
4
5
6
7
8
9
10
11
12
13
14
all_color = {"red", "blue", "green", "black"}
select_color = {"blue", "black"}
# issubset方法:判断 方法调用者集合 是否为 方法参数集合 的 子集
print("判断 方法调用者集合 是否为 方法参数集合 的 子集:", select_color.issubset( all_color ))
# issuperset方法:判断 方法调用者集合 是否为 方法参数集合 的 超集
print("判断 方法调用者集合 是否为 方法参数集合 的 超集:", all_color.issuperset( select_color ))
# setA < setB: A集合是B集合的真子集;B集合是A集合的真超集
# setB > setA: A集合是B集合的真子集;B集合是A集合的真超集
print("select_color < all_color : " , select_color < all_color)
print("all_color > select_color : " , all_color > select_color)
# setA <= setB: A集合是B集合的子集;B集合是A集合的超集
# setB >= setA: A集合是B集合的子集;B集合是A集合的超集
print("select_color <= all_color : " , select_color <= all_color)
print("all_color >= select_color : " , all_color >= select_color)

figure 8.png

参考文献

  1. Python编程·第3版:从入门到实践 Eric Matthes著
  2. Python基础教程·第3版 Magnus Lie Hetland著
  3. 流畅的Python·第1版 Luciano Ramalho著
请我喝杯咖啡捏~
  • 本文作者: Aaron Zhu
  • 本文链接: https://xyzghio.xyz/SetOfPy/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-ND 许可协议。转载请注明出处!

欢迎关注我的微信公众号:青灯抽丝