检查一个集合是否为空的方法主要有三种。
- 隐式:不加修改地将集合传入一个布尔上下文。Python 会使用
bool()自动将其转换为布尔值。 - 显式的:将集合传入
bool()函数。 - 比较:像这样将集合与空集进行比较。
my_set == set()
接下来让我们深入了解每一种方式。
方法1:隐式布尔转换(If条件)
如何在If语句中检查一个集合是否为空?
你可以检查一个集合是否为空,方法是简单地将该集合传递到if条件中,而不作任何修改(例如:if my_set: ...)。Python 会自动给这些上下文中的每个对象关联一个布尔值。
- 如果集合是空的,条件将评估为
False,因为所有的空容器类型在布尔上下文中都会自动转换为False。else分支被执行。 - 如果集合不是空的,条件的值是
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/)方法只是从集合中删除一个元素,所以它变成了空的。