集合是由不重复元素组成的无序容器。其基本用法包括成员检测、消除重复元素。集合对象支持并集、交集、差集、对称差集等数学运算。
创建集合#
创建集合用花括号或 set() 函数。如下为使用花括号创建集合:
pets = {'dog', 'cat', 'rabbit', 'fish'}
lucky_number = {6, 8, 9}
mixed_set = {'dog', 4, False}
print(pets, type(pets)) # {'rabbit', 'fish', 'dog', 'cat'} <class 'set'>
print(lucky_number, type(lucky_number)) # {8, 9, 6} <class 'set'>
print(mixed_set, type(mixed_set)) # {False, 4, 'dog'} <class 'set'>
使用 set() 函数创建集合:
set1 = set( [1, 2, 3] ) # {1, 2, 3}
set2 = set( (1, 2, 3) ) # {1, 2, 3}
set3 = set('abcd') # {'a', 'b', 'c', 'd'}
set4 = set(range(3, 13, 3)) # {9, 3, 12, 6}
set5 = set( {'mammal', 'bird', 'reptile', 'fish'} ) # {'mammal', 'bird', 'fish', 'reptile'}
set6 = set() # 空集合 set()
注意,空集合不能使用 {} 表示,而只能使用 set() 表示,前者表示一个空字典。
集合中的元素必须是可哈希的(hashable,要求其是不可变的),而列表是不可哈希的,因此 {'dog', 4, False, ['a', 'c']} 不是一个有效的集合字面量,但 {'dog', 4, False, ('a', 'c')} 是。
集合元素的添加和删除#
集合是可变的,可以通过如下方式添加或删除集合中的元素:
pets = {'dog', 'cat', 'rabbit', 'fish'}
pets.add('snake') # add 方法用于向集合中添加元素
print(pets) # {'snake', 'rabbit', 'dog', 'cat', 'fish'}
pets.remove('rabbit') # remove 方法移除指定元素
print(pets) # {'fish', 'cat', 'dog', 'snake'}
pets.pop() # pop 方法随机从集合中删除一个元素
print(pets) # {'cat', 'fish', 'snake'}
pets.clear() # clear 方法删除集合中的所有元素
print(pets) # set()
del pets # del 删除集合
集合的并集、交集和差集运算#
对 Python 中集合的运算与数学上集合的运算相似,如下所示:
- 并集:
A | B,得到两个集合的所有元素放在一起组成的新集合。 - 交集:
A & B,得到两个集合共有的元素放在一起组成的新集合。 - 差集,又称补集:
A - B,得到属于A的、但不属于B的元素组成的新集合。 - 对称差集:
A ^ B,得到属于A或B,但不同时属于A和B的元素组成的新集合。

(a)并集 `A | B`

(b)交集 `A & B`

(c)差集 `A - B`

(d)对称差 `A ^ B`
集合
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
print(a | b) # {1, 2, 3, 4, 5, 6}
print(a & b) # {3, 4}
print(a - b) # {1, 2}
print(a ^ b) # {1, 2, 5, 6}