Python 集合 (Sets)

Python 配备了几种内置数据类型来帮助我们组织数据。这些结构包括列表 (lists)、字典 (dictionaries)、元组 (tuples) 和集合 (sets)

来自 Python 3 文档

集合是无序的、不包含重复元素的集合。基本用途包括成员资格测试和消除重复条目。

阅读 Python 集合:是什么、为什么和如何使用 以获得更深入的参考。

初始化集合

创建集合有两种方法:使用花括号 {} 和内置函数 set()

空集合

创建集合时,请确保不要使用空花括号 {},否则您将得到一个空字典。

# 使用花括号或 set() 函数创建集合
s = {1, 2, 3}  # 使用花括号
s = set([1, 2, 3])  # 使用 set() 构造函数

# 警告:空 {} 创建一个字典,而不是一个集合
s = {}  # 这将创建一个字典而不是一个集合
type(s)  # 返回 <class 'dict'>
<class 'dict'>

唯一元素的无序集合

集合会自动删除所有重复的值。

# 集合会自动删除重复项
s = {1, 2, 3, 2, 3, 4}  # 重复项被删除
s  # 返回 {1, 2, 3, 4}
{1, 2, 3, 4}
测验

登录后即可答题并追踪学习进度

当你创建一个包含重复值的集合时会发生什么?
A. 重复项被自动删除
B. 抛出错误
C. 集合保留所有重复项
D. 只保留第一次出现的

并且由于它是一种无序数据类型,因此不能对其进行索引。

s = {1, 2, 3}
s[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'set' object does not support indexing

集合的添加和更新 (add and update)

使用 add() 方法我们可以向集合中添加单个元素。

# add() 方法:向集合中添加单个元素
s = {1, 2, 3}
s.add(4)  # 添加元素 4
s
{1, 2, 3, 4}

使用 update(),可以添加多个元素:

# update() 方法:从可迭代对象中添加多个元素
s = {1, 2, 3}
s.update([2, 3, 4, 5, 6])  # 添加多个元素(忽略重复项)
s
{1, 2, 3, 4, 5, 6}

集合的移除和丢弃 (remove and discard)

这两种方法都会从集合中移除一个元素,但如果值不存在,remove() 会引发 key error

# remove() 方法:移除元素,如果找不到则引发 KeyError
s = {1, 2, 3}
s.remove(3)  # 移除元素 3
s
{1, 2}
s.remove(3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 3

discard() 不会引发任何错误。

# discard() 方法:移除元素,如果找不到则不报错
s = {1, 2, 3}
s.discard(3)  # 移除元素 3 (安全,缺失时不报错)
s
{1, 2}
s.discard(3)
测验

登录后即可答题并追踪学习进度

remove()discard() 方法在集合上的区别是什么?
A. remove() 移除一个元素,discard() 移除所有
B. 没有区别
C. 如果元素不存在,remove() 抛出错误,discard() 不会
D. remove() 更快

集合的并集 (union)

union()| 将创建一个包含所有提供集合中所有元素的新集合。

# union():组合来自多个集合的所有元素(无重复项)
s1 = {1, 2, 3}
s2 = {3, 4, 5}
s1.union(s2)  # 或 's1 | s2' - 返回 {1, 2, 3, 4, 5}
{1, 2, 3, 4, 5}

集合的交集 (intersection)

intersection()& 将返回一个只包含所有集合中共同元素的集合。

# intersection():返回所有集合共有的元素
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s3 = {3, 4, 5}
s1.intersection(s2, s3)  # 或 's1 & s2 & s3' - 返回 {3}
{3}
测验

登录后即可答题并追踪学习进度

intersection() 返回集合的什么?
A. 所有集合中的所有元素
B. 仅包含所有集合中共同的元素
C. 第一个集合中存在但其他集合中不存在的元素
D. 存在于任一集合中但不同时存在于两者中的元素

集合的差集 (difference)

difference()- 将只返回第一个集合(被调用的集合)中独有的元素。

# difference():返回第一个集合中存在但其他集合中不存在的元素
s1 = {1, 2, 3}
s2 = {2, 3, 4}

s1.difference(s2)  # 或 's1 - s2' - 返回 {1}
{1}
s2.difference(s1) # 或 's2 - s1'
{4}

集合的对称差集 (symmetric_difference)

symmetric_difference()^ 将返回所有不共同的元素。

# symmetric_difference():返回存在于任一集合中但不同时存在于两者中的元素
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s1.symmetric_difference(s2)  # 或 's1 ^ s2' - 返回 {1, 4}
{1, 4}
测验

登录后即可答题并追踪学习进度

symmetric_difference() 返回两个集合的什么?
A. 两个集合中的所有元素
B. 仅包含两个集合中共同的元素
C. 第一个集合中存在但第二个集合中不存在的元素
D. 存在于任一集合中但不同时存在于两者中的元素

相关链接