集合

集合是由不重复元素组成的无序容器。其基本用法包括成员检测、消除重复元素。集合对象支持并集、交集、差集、对称差集等数学运算。

创建集合#

创建集合用花括号或 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,得到属于 AB,但不同时属于 AB 的元素组成的新集合。
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}
元组字典