集合 set¶
集合概述¶
集合中所有元素都是独一无二的,而且集合元素都是无序的,集合同样存在推导式,称为集合推导式,由于集合是无序的所以不可以通过下标的方式访问集合的元素,如果需要访问集合中的元素可以使用迭代的方式进行访问,可以利用集合轻松的去重。
集合创建¶
| Python | |
|---|---|
集合元素访问¶
集合方法使用¶
下列方法既适用于 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 集合中的所有元素 |