在 Python 中编码时,你是否曾经需要检查可迭代对象中的任何项目或所有项目的计算结果是否为 True?下次你需要这样做时,请务必使用漂亮的函数 any()all()

在本教程中,我们将了解 Python 的 any()all() 函数,并使用简单的示例来了解它们的工作原理。

Python 中的布尔数据类型

在我们学习 any()all() 之前,让我们快速回顾一下 Python 中的布尔数据类型。你可以在任何 Python 对象上调用 bool() 以获取其真假值。你可以在你喜欢的 IDE 中运行下面的代码示例。

# None 的真假值是 False
print(bool(None))
# 输出
False

# 一个空字符串("")的真假值是 False
print(bool(""))
# 输出
False

# 一个空字符串或任何可迭代对象的真假值是 False
print(bool([]))
# 输出
False

# 0 {int (0), float (0.0) 和 complex (0j)} 的真假值是 False
print(bool(0))
# 输出
False

如上面的代码所示,

  • None 的真假值为 False
  • 数字零(0)——整数、浮点数和 0 的复数表示——都是 False,并且
  • 所有空的可迭代对象(如列表、元组和字符串)的真假值为 False

也就是说,所有非零值和非空可迭代对象都为 True,这是相当直观的。

如何在 Python 中使用 any() 函数

让我们了解 any() 函数的语法,看一些简单的例子,然后再看更有用的例子。

👉 语法any(iterable)

  • 对于迭代中的任何 x,如果 bool(x)True,返回 True
  • 如果迭代是空,返回 False

因此,any() 函数将一个可迭代对象作为参数,只要该可迭代对象中至少有一项为 True,就返回 True

下面是一些简单的例子来验证 any() 函数是如何工作的:

list_1 = [0,0,0,1,0,0,0,0]
# any(a list with at least one non-zero entry) returns True
print(any(list_1))
# Output
True

list_2 = [0j,0,0,0.0,0,0,0.0,0]
# any(a list of zeros) returns False
print(any(list_2))
# Output
False

list_3 = [True, False, False]
# any(a list with at least one True value) returns True
print(any(list_3))
# Output
True

list_4 = ["","","code more"]
# any(a list with at least one non-empty string) returns True
print(any(list_4))
# Output
True

list_5 = ["","",""]
# any(a list of empty strings) returns False
print(any(list_5))
# Output
False

如何使用 Python 的 any() 函数检查字符串中的数字

现在让我们使用 any() 函数来检查字符串中是否有任何数字。让我们把步骤写下来。

  • 检查:字符串中是否有任何数字
  • 遍历字符串以访问字符串中的每个字符
  • 通过调用 isdigit() 方法检查每个字符是否是数字
  • 如果被测字符是数字,则 isdigit() 返回 True,否则返回 False

列表推导式(list comprehension)对于在列表中收集所有这些真假值非常有帮助。这是一个快速回顾:

 # 列表推导式

 [output_expression for every_item in an_iterable]
     |
     |
     V
    result of doing something on each item in the iterable
    
 # 本质上,循环遍历迭代,对每一项进行操作,然后返回操作的结果。
 

如下面的代码片段所示,我们的示例字符串 coding**is**cool**345 包含数字。

因此,对字符串调用 any() 函数应该返回 True。我们使用列表推导式来根据字符是否为数字来获取 TrueFalse 值的列表。

my_string = "coding**is**cool**345"
are_there_digits = [char.isdigit() for char in my_string]
print(any(are_there_digits))

# 输出
True

请注意 are_there_digits 是一个列表,其项数与字符串的长度一样多。

对于字符串中的每个字符,都有一个对应的真假值——如果字符是数字,则为 True,如果字符不是数字,则为 False,如下所示。

print(are_there_digits)

# Output
[False, False, False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, True, True, True]

如何使用 Python 的 any() 函数检查字符串中的字母

让我们再举一个类似的例子。这一次,让我们检查字符串中的字母。

被测试的字符串是不包含字母的 ***456278)))——调用 any() 会按预期返回 False。对于字符串中的每个字符,调用 isalpha() 方法检查它是否是一个字母。

my_string = "***456278)))"
num = [char.isalpha() for char in my_string]
print(any(num))

# Output
False

is_letter  一个 False 值列表,如下:

print(is_letter)

# Output
[False, False, False, False, False, False, False, False, False, False, False, False]

如何使用 Python 的 any() 函数将多个条件与逻辑 OR 组合在一起

假设你决定提高工作效率并写下下面显示的列表,但是,你选择不苛求自己,并决定只要列表中的一项发生,你就可以拥有很多糖果!😀

any

请注意我们如何考虑多个条件,但即使其中一个评估为 True,也会选择糖果。

这是不是非常类似于 if 语句,你需要检查由逻辑 or 运算符链接的多个条件是否评估为 True?是的,并且 any() 函数可以非常方便地做到这一点。

假设你有 N 个条件 c1c2c3...cN,考虑下面的伪代码:

if c1 or c2 or ... c_(N-1) or CN:
	# DO THIS

else:
	# DO THIS

你现在可以将所有这些条件收集在一个可迭代对象中,例如列表或元组,然后对该可迭代对象调用 any() 以检查一个或多个条件是否为 True,如下所示。是不是很简单? 😀

conditions = [c1,c2,..., c_N]

if any(conditions):
	# DO THIS
else:
	# DO THIS

如何在 Python 中使用 all() 函数

让我们从 all() 函数的语法开始。

👉 语法:all(iterable)

  • 如果 bool(x) 对于可迭代对象中的所有值 xTrue,则返回 True
  • 如果可迭代对象为空,则返回 True

all() 函数接受一个可迭代对象作为参数,仅当可迭代对象中的所有项的计算结果为 True,或可迭代对象为空时才返回 True。在所有其他情况下,all() 函数返回 False

如何使用 Python 的 all() 函数检查字符串中的字母

让我们以类似的例子来检查字符串的某些特征。

测试字符串 coding**is**cool 除了字母之外还包含特殊字符 *。因此,当我们使用 all() 函数检查字符串中的所有字符是否都是字母时,我们应该得到 False

my_string = "coding**is**cool"
are_all_letters = [char.isalpha() for char in my_string]
print(all(are_all_letters))
# Output
False

print(are_all_letters)
# Output
[True, True, True, True, True, True, False, False, True, True, False, False,
True, True, True, True]

请注意列表 are_all_letters 如何在字符串中出现 * 的所有位置都有 False 值。

如何使用 Python 的 all() 函数检查字符串中的数字

现在让我们使用 all() 函数检查字符串中的所有字符是否都是数字。测试字符串 56456278 仅包含数字,因此,调用 all() 应该返回 True,因为列表推导式为我们提供了一个 True 值列表。

my_string = "56456278"
are_all_digits = [char.isdigit() for char in my_string]
print(all(are_all_digits))
# Output
True

print(are_all_digits)
# Output
[True, True, True, True, True, True, True, True]

如何使用 Python 的 all() 函数用逻辑 AND 组合多个条件

让我们考虑以下示例。这一次,你要争夺 iPad,而且条件更加严格。你必须完成列表中的所有任务才能从你的堂兄那里获得 iPad。😀

all

现在,这与使用 if 语句检查由逻辑 and 运算符链接的多个条件是否评估为 True 非常相似,如下所示:

if c1 and c2 and ... c_(N-1) and CN:
	# DO THIS

else:
	# DO THIS

你可以使用 all() 函数通过收集迭代中的条件,然后在迭代上调用 all() 函数来使这一切变得更加简洁。

conditions = [c1,c2,..., c_N]

if all(conditions):
	# DO THIS
else:
	# DO THIS

总结

希望这篇教程帮助你理解 Python 中的 any()all() 函数。

我们下篇文章再见,学习愉快!

原文:Python any() and all() Functions – Explained with Examples,作者:Bala Priya C