Python 集合 Set

本文最后更新于:2022年8月5日 晚上

“集”这个概念在 Python 中算是比较年轻的,同时它的使用率也比较低。set 和它的不可变的姊妹类型 frozenset 直到 Python 2.3 才首次以 模块的形式出现,然后在 Python 2.6 中它们升级成为内置类型。本文记录相关内容。

集合

  • 表示唯一对象的聚集,因此集合中没有重复元素,可以用于去重。
  • 初始化集合用 set() 函数,或带元素地使用 {…}
1
2
3
4
5
6
7
8
l = ['spam', 'spam', 'eggs', 'spam']
s = set(l)
t = {1, 2}
-->
s
{'eggs', 'spam'}
t
{1, 2}
  • 集合中的元素必须是可散列的,set 类型本身是不可散列的,但是 frozenset 可以。因此可以创建一个包含不同 frozenset 的 set。
1
2
3
4
5
6
7
data = [1,2,3]
f = frozenset(data)
s = set([*data, f])
print(s)

-->
{frozenset({1, 2, 3}), 1, 2, 3}
  • 除了保证唯一性,集合还实现了很多基础的中缀运算符。给定两个集合 a 和 b,a | b 返回的是它们的合集,a & b 得到的是交集,而 a - b 得到的是差集。合理地利用这些操作,不仅能够让代码的行数变少,还 能减少 Python 程序的运行时间。这样做同时也是为了让代码更易读,从 而更容易判断程序的正确性,因为利用这些运算符可以省去不必要的循 环和逻辑操作。
1
2
3
4
5
6
7
8
9
10
11
12
13
set1 = set([1,2,3])
set2 = set([2,3,4])
set3 = set([4,5,6])

print(set1 | set2)
print(set1 - set2)
print(set2 & set2)

>>>
{1, 2, 3, 4}
{1}
{2, 3, 4}
<<<

集合推导

  • Python 2.7 带来了集合推导(setcomps)和字典推导。
1
2
3
4
5
6
s = {num for num in range(10) if num % 2}
print(s)

>>>
{1, 3, 5, 7, 9}
<<<

集合方法

  • 集合的数学运算

  • 集合的比较运算

  • 集合的实用方法

参考资料


Python 集合 Set
https://www.zywvvd.com/notes/coding/python/fluent-python/chapter-3/python-set/python-set/
作者
Yiwei Zhang
发布于
2022年5月27日
许可协议