4.1 按规则获取子集
子集是其中所有元素都属于另一个更大集合的集合。在Python中,有几个内置方法和操作符用来处理子集。下面我会讲解如何获取子集,如何检查一个集合是否是另一个集合的子集,以及如何在不同场景中运用这些知识。
使用for循环
你可以创建一个空集合,并通过for循环向其添加满足条件的元素。
my_set = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
even_set = set()
for x in my_set:
if x % 2 == 0:
even_set.add(x)
print(even_set) # 输出: {2, 4, 6, 8, 10}
这是创建子集最简单直接的方式。但还有其他更紧凑的方法。
使用filter()函数
filter()函数将函数应用于每个元素,只返回那些函数返回值为True的元素。结果需要转换回集合。
my_set = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
even_set = set(filter(lambda x: x % 2 == 0, my_set))
print(even_set) # 输出: {2, 4, 6, 8, 10}
在filter()函数中使用了lambda表达式——这是一种简短的方式来定义辅助函数或过滤规则。我会在接下来的几堂课中讲到lambda。
4.2 使用集合生成器
还记得List Comprehension吗?我们在方括号里快速生成列表及其元素?这个语法工具看起来是这样的:
[表达式 for 变量 in 序列]
其中:
-
变量—某个变量的标识符, -
序列—该变量取值的序列(可以是列表、字符串或通过range函数得到的对象), -
表达式—通常依赖于生成器中使用的变量的某个表达式,用来填充列表元素。
对于集合也有类似的功能,只不过需要使用大括号:
{表达式 for 变量 in 序列}
集合生成器允许我们简单地创建新的集合,基于现有的集合并应用过滤条件。
这样可以选择集合中的偶数元素:
my_set = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
even_set = {x for x in my_set if x % 2 == 0}
print(even_set) # 输出: {2, 4, 6, 8, 10}
这样可以选择字符串:
my_set = {1, 2, 3, 4, 5, 6, 7, 8, 9, "apple", "banana"}
even_set = {x for x in my_set if type(x) == str}
print(even_set) # 输出: {"apple", "banana"}
4.3 检查元素的存在
在集合中执行的基本操作之一就是检查元素是否存在于集合中。在Python中,有几种方式可以做到这一点。让我们来看看检查元素是否存在于集合中的一些方法。
使用in操作符
检查元素是否存在于集合中最常见和方便的方法就是使用 in操作符。如果元素存在于集合中,该方法返回True,否则返回False。
my_set = {1, 2, 3, 4, 5}
print(3 in my_set) # 输出: True
print(6 in my_set) # 输出: False
使用not in操作符
not in操作符是in操作符的反义, 用于检查元素是否不存在于集合中。如果元素不存在于集合中,返回True,否则返回False。
my_set = {1, 2, 3, 4, 5}
print(6 not in my_set) # 输出: True
print(3 not in my_set) # 输出: False
使用循环
虽然使用循环检查元素是否存在于集合中不是最有效的方法,但在你处理更复杂的数据结构或执行其他操作时,它可能是有用的。
my_set = {1, 2, 3, 4, 5}
element = 3
found = False
for item in my_set:
if item == element:
found = True
break
print(found) # 输出: True
4.4 检查集合的嵌套
Python提供了操作符 <=和方法 issubset()来检查一个集合是否是另一个集合的子集。
使用<=操作符
<=操作符可以轻松检查一个集合是否为另一个集合的子集。
set_a = {1, 2, 3}
set_b = {1, 2, 3, 4, 5}
print(set_a <= set_b) # 输出: True
print(set_b <= set_a) # 输出: False
使用issubset()方法
issubset()方法执行与<=操作符相同的功能,如果一个集合的所有元素都包含在另一个集合中,则返回True。
set_a = {1, 2, 3}
set_b = {1, 2, 3, 4, 5}
print(set_a.issubset(set_b)) # 输出: True
print(set_b.issubset(set_a)) # 输出: False
检查超级集
类似于子集,你可以使用>=操作符和方法 issuperset()检查一个集合是否为另一个集合的超级集。
使用>=操作符
set_a = {1, 2, 3, 4, 5}
set_b = {1, 2, 3}
print(set_a >= set_b) # 输出: True
print(set_b >= set_a) # 输出: False
使用issuperset()方法
set_a = {1, 2, 3, 4, 5}
set_b = {1, 2, 3}
print(set_a.issuperset(set_b)) # 输出: True
print(set_b.issuperset(set_a)) # 输出: False
GO TO FULL VERSION