跳转至

集合 set

集合概述

集合中所有元素都是独一无二的,而且集合元素都是无序的,集合同样存在推导式,称为集合推导式,由于集合是无序的所以不可以通过下标的方式访问集合的元素,如果需要访问集合中的元素可以使用迭代的方式进行访问,可以利用集合轻松的去重。

集合创建

Python
# 例一
a = {"123"}

# 例二
# 通过集合推导式进行创建
a = {x for x in "hello"}

# 例三
# 通过关键字进行创建
a = set("hello")

集合元素访问

Python
1
2
3
4
# 通过迭代的方式访问集合元素
a = {1, 2, 3}
for i in a:
  print(i)

集合方法使用

下列方法既适用于 set 对象,也适用于 frozenset 对象,frozenset() :是一个不可变的集合。

方法 含义
s.copy() 返回 s 集合的一个浅拷贝
s.isdisjoint(other) 如果 s 集合中没有与 other 容器存在共同的元素,那么返回 True,否则返回 False
s.issubset(other) 如果 s 集合是 other 容器的子集(注 1),那么返回 True,否则返回 False
s.issuperset(other) 如果 s 集合是 other 容器的超集(注 2),那么返回 True,否则返回 False
s.union(*others) 返回一个新集合,其内容是 s 集合与 others 容器的并集(注 3)
s.intersection(*others) 返回一个新集合,其内容是 s 集合与 others 容器的交集(注 4)
s.difference(*others) 返回一个新集合,其内容是存在于 s 集合中,但不存在于 others 容器中的元素(注 5)
s.symmetric_difference(other) 返回一个新集合,其内容是排除掉 s 集合和 other 容器中共有的元素后,剩余的所有元素
  • 注意 1: 对于两个集合 A、B,如果集合 A 中任意一个元素都是集合 B 中的元素,我们就说这两个集合有包含关系,称集合 A 为集合 B 的子集(Subset)。
  • 注意 2: 对于两个集合 A、B,如果集合 B 中任意一个元素都是集合 A 中的元素,我们就说这两个集合有包含关系,称集合 A 为集合 B 的超集(Superset)。
  • 注意 3: 对于两个集合 A、B,把他们所有的元素合并在一起组成的集合,叫做集合 A 与集合 B 的并集(Union)。

  • 注意 4: 对于两个集合 A、B,由所有属于集合 A 且属于集合 B 的元素所组成的集合,叫做集合 A 与集合 B 的交集(Intersection)。

  • 注意 5: 对于两个集合 A、B,由所有属于集合 A 且不属于集合 B 的元素所组成的集合,叫做集合 A 与集合 B 的差集(Difference)。

  • 注意 6: others 参数表示支持多个容器(参数类型可以是集合,也可以是序列);other 参数则表示单个容器。

下表列举的方法只适用于 set 对象,不适用于 frozenset:

方法 含义
s.update(*others) 使用 others 容器中的元素来更新集合
s.intersection_update(*others) 更新 s 集合,其内容是 s 集合与 others 容器的交集(见上方注 4)
s.difference_update(*others) 更新 s 集合,其内容是 s 集合与 others 容器的差集(见上方注 5)
s.symmetric_difference_update(other) 更新 s 集合,其内容是排除掉 s 集合和 other 容器中共有的元素后,剩余的所有元素
s.add(elem) 将 elem 元素添加到 s 集合中
s.remove(elem) 将 elem 元素从 s 集合中移除(如果不存在该元素,则抛出 KeyError 异常)
s.discard(elem) 将 elem 元素添加到 s 集合中移除(如果不存在该元素,也没有关系)
s.pop() 从 s 集合中移除并返回任意一个元素(如果集合为空,则抛出 KeyError 异常)
s.clear() 删除 s 集合中的所有元素