如何利用代码检查一个集合是否是空的?

184 阅读2分钟

检查一个集合是否为空的方法主要有三种。

  1. 隐式:不加修改地将集合传入一个布尔上下文。Python 会使用bool() 自动将其转换为布尔值。
  2. 显式的:将集合传入bool() 函数。
  3. 比较:像这样将集合与空集进行比较。my_set == set()

接下来让我们深入了解每一种方式。

方法1:隐式布尔转换(If条件)

如何在If语句中检查一个集合是否为空?

你可以检查一个集合是否为空,方法是简单地将该集合传递到if条件中,而不作任何修改(例如:if my_set: ...)。Python 会自动给这些上下文中的每个对象关联一个布尔值。

  • 如果集合是空的,条件将评估为False ,因为所有的空容器类型在布尔上下文中都会自动转换为Falseelse 分支被执行。
  • 如果集合不是空的,条件的值是True 。在这种情况下,主分支if 被执行。

这里有一个例子:

s = set()
if s:
    print('set is not empty')
else:
    print('set is empty')

# Output: set is empty

你也可以将条件反转为if not s: ... ,以便在集合为空时执行主分支if

s = set()
if not s:
    print('set is empty')

# Output: set is empty

方法2:将集合传入bool()函数中

你可以把这个集合传到 [bool()](https://blog.finxter.com/python-bool/)函数中,并使用not运算符反转它来检查该集合是否为空。因此,如果my_set 是空的,表达式not bool(my_set) 将返回True

print('Set is empty?', not bool(set()))
# Set is empty? True 

print('Set is empty?', not bool({1, 2, 3}))
# Set is empty? False 

方法3:使用等价运算符 ==

你可以通过使用Python的等价运算符 == ,将一个集合与一个空集合进行比较来检查它是否为空。表达式my_set == set() 将集合my_set 与空集进行比较。即使两者都指向内存中的不同对象,如果两者都是空的,平等运算符仍然会评估为True ,否则就是False

这里有一个例子,我们创建一个非空集,检查它是否为空,删除一个元素,然后再检查。

my_set = {'Alice'}

print('Set is empty?', my_set==set())
# Set is empty? False 

my_set.pop()

print('Set is empty?', my_set==set())
# Set is empty? True 


[set.pop()](https://blog.finxter.com/python-set-pop/)方法只是从集合中删除一个元素,所以它变成了空的。