07. 集合

1. 集合介绍

集合(set)是一个元素不可重复的无序的序列。

s = {1, "a", (1, 2)}
  • 集合在创建时,会自动删除重复的元素。
  • 可以使用花括号{}或set()函数创建集合。但注意若要创建空集合只能使用set(),因为{}默认创建的是空字典。
  • 无法使用索引访问集合的元素。
  • 集合的元素只能是不可变类型。
  • 集合对象还支持union(联合),intersection(交),difference(差)、sysmmetric_difference(对称差集)等数学运算。

2. 集合的常用操作

创建

>>> # 方式一
>>> {1, "a", "a", (1, 2)}
{1, ‘a‘, (1, 2)}
>>> # 方式二:使用set()函数
>>> set()  # 创建空集合
set()
>>> set({1, 2, 3})  # 传入集合
{1, 2, 3}
>>> set((1, 2, 3))  # 传入元组
{1, 2, 3}
>>> set({1:2})  # 传入字典,仅返回键
{1}
>>> set([1, 2])  # 传入列表
{1, 2}
>>> set("abc")  # 传入字符串
{‘c‘, ‘a‘, ‘b‘}
>>> set("www")
{‘w‘}
  • copy():拷贝一个新的集合(新的内存地址)。
>>> s
{1, 2, 3, 4}
>>> a = s.copy()
>>> a
{1, 2, 3, 4}
>>> s
{1, 2, 3, 4}
>>> id(a)
30777096
>>> id(s)
30776984

  • add():s.add(x将对象x增加到集合s中,若已存在该元素,不进行任何操作。

  • update():s.update(x) 也可以增加元素,增加对象还可以是列表、元组、字典等(逐个拆解其元素增加到集合中),x可以为多个对象。

>>> s = {1, 2}
>>> s.add(3)
>>> s
{1, 2, 3}
>>> s.add((4, 5))  # 添加一个元组作为元素
>>> s
{(4, 5), 1, 2, 3}
>>> s.update([6, 7])  # 拆解列表元素并添加
>>> s
{1, 2, 3, 6, 7, (4, 5)}
>>> s.add([6, 7])  # add()无法添加可变类型
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: ‘list‘
>>> s.update({11:10})  # 仅添加键
>>> s
{1, 2, 3, 6, 7, 11, (4, 5)}
>>> s.update((4, 5))  # 拆解元组元素并添加
>>> s
{1, 2, 3, 4, 5, 6, 7, 11, (4, 5)}
>>> s.update([20, 21], (22, 23))  # 传入多个对象
>>> s
{1, 2, 3, 4, 5, 6, 7, 11, (4, 5), 20, 21, 22, 23}

  • remove():s.remove(x) 将元素x从集合s中删除,若元素x不存在则返回异常。

  • discard():类似于remove(),但若元素不存在并不会返回异常。

  • pop():随机删除一个元素,并返回该元素。

  • clear():清空集合所有的元素。
>>> s = {1, 2, 3, 4, 5}
>>> s.remove(5)
>>> s
{1, 2, 3, 4}
>>> s.remove(5)  # 元素不存在,报错
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 5
>>> s.discard(5)  # 元素不存在,但不报错
>>> s
{1, 2, 3, 4}
>>> s.pop()
1
>>> s.clear()
>>> s
set() 

3. 集合间的运算

>>> {1, 2} & {2, 3}  # 交集。等价于 {1, 2}.intersection({2, 3})
{2}
>>> {1, 2} | {2, 3}  # 并集。等价于 {1, 2}.union({2, 3})
{1, 2, 3}
>>> {1, 2} - {2, 3}  # 左集合元素不存在于右集合中的元素
{1}
>>> {1, 2} ^ {2, 3}  # 左右集合不同时存在的元素
{1, 3}

相关推荐