Python 中的 any()

2024 年 8 月 29 日 | 5 分钟阅读

想象一下,我们必须检查 100 个条件才能执行操作。传统上,我们使用条件语句(if、if-else、elif、嵌套 if)来检查条件是否为真。但是,对于如此多的条件,代码会变得冗长,过多的 if 语句会影响代码的可读性。

在这种情况下,程序员的选择必须是使用 Python 的 any() 函数。本教程将通过示例解释 any() 函数的用法和功能。

any() 的示例

输出

True
False
True

理解

在上述代码的三种情况下,any() 仅在所有条件都为 False 的第二种情况下返回 False。该函数需要至少一个条件为 True 才能返回 True。

机制

惰性求值: 当我们向函数提供多个表达式/值时,它会从左到右继续评估每个表达式,一旦找到一个 True 表达式,它就会停止评估并返回 True。它甚至不会检查后续的表达式。

语法

可迭代对象: 任何可以使用循环(如元组、列表、字典、集合等)进行迭代的对象(整数、浮点数等不可迭代)。

  • 如果至少一个条件或值评估为 True,则该函数返回 True,否则返回 False。(返回布尔值 True 或 False)

等效布尔值

标记等效布尔值
0, 0.0False
非零整数、浮点数、双精度数……true
空字符串、列表、元组……任何可迭代对象False
非空可迭代对象true
False
  • 使用 bool(x) 函数,我们可以找到 Python 中任何标记的等效布尔值。

示例代码

输出

0:  False
Some non-zero integer:  True
0.0:  False
Some non-zero float:  True
Empty string:  False
Non-empty string:  True
Empty list:  False
Non-empty list:  True
None:  False
  • 了解了这些值后,我们就可以准确地使用 any() 函数了。

示例用法场景

通常,如果代码成功,它返回 0;如果发生任何意外错误,它返回一个数字。想象一下运行许多测试用例,并检查所有测试用例是否都返回 0。我们可以使用 any() 来检查是否有任何测试用例返回了非零值。

代码

输出

Find if all the test cases returned zero
At least one test case returned a non-zero number

查找集合空字符串中是否包含任何非空字符串

代码

输出

Find if any empty string is created by accident
Atleast one character is included in some string

列表、元组和集合的 any()

示例

输出

Lists: 
[0, 0, 0.0, ''] : False
[1, 4, 9.0, 'Hi'] : True
Tuples: 
(0, 0, 0.0, '') : False
(1, 4, 9.0, 'Hi') : True
Sets: 
{0, ''} : False
{1, 4, 9.0, 'Hi'} : True

字典的 any()

在字典的情况下,any() 检查字典中是否至少有一个键为 True。如果所有键都为 False,则返回 False。

  • 如果将空字典作为参数,则返回 False

示例

输出

Dictionary: 
{0: 'Hey'} : False
{} : False
{0: '', 1: 'Hello'} : True

带条件的 any()

我们可以使用 any() 函数来检查可迭代对象中的至少一个元素是否满足特定条件。

示例

输出

The list:  [0, -4, -3, 2, -1]
At least one element in the list is greater than 0

OR 和 any()

'OR' 是 Python 的布尔运算符之一。如果至少一个条件评估为 True,则返回 true。OR 和 any() 都遵循惰性方法,并且它们具有相同的函数功能,但并非完全相同。以下是一些显示两者之间相似性的示例。

示例

输出

True
True
True
True

以下是区别

ANY()
它是一个运算符它是一个函数
它返回第一个 True 值
print(78 or 0)
O/P: 78
它返回布尔值 True 或 False
print(any([78, 0]))
O/P: True
它在值之间使用,因为它是一个运算符。它只接受一个参数,该参数必须是可迭代的,包含任意数量的值(列表、元组……)
print(0 or 0 or 0 or 0 or "Hi")
O/P: Hi
print(0 or 0 or 0 or 0 or "Hi")
O/P: True

示例

输出

True
Hi
  • OR 和 any() 在找到第一个元素“Hi”后停止检查值,因为它已经是 True - 惰性求值。

不使用 any() 的 any()

了解如何实际使用 any() 函数的功能也很重要,但无需实际调用该函数。

  • 我们可以使用简单的 for 循环和 if-else 来实现这一点。

示例

输出

The list:  [0, -4, -3, 2, -1]
True
  • 更高效地,我们可以使用一个函数。

示例

输出

The list:  [0, -4, -3, 2, -1]
True