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. 存在于任一集合中但不同时存在于两者中的元素