CodeGym /课程 /Python SELF ZH /获取子集

获取子集

Python SELF ZH
第 9 级 , 课程 4
可用

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
            
        
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION