十分钟学会 Python any() 和 all() 函数

上一篇 / 下一篇  2024-03-05 16:15:52

  回想下,在 Python 中编程时,你是否曾经需要检查某个可迭代对象(如列表)中的任何元素或所有元素的计算结果是否为True?
  假设,我们要判断数字列表a的所有数字是否都大于0,此时你估计会这么干:
  a = [1, 2, 3, 4]
  def is_big_0(l):
      # 判断列表l的所有数字是否大于,如果大于0则返回True,否则返回False
      for i in l:
          if i <= 0:
              return False
      return True
  print(a)
  停顿几秒,想一想,假设下次我们要判断其他条件,如每个元素都是偶数或奇数?难道每次都要写一个函数然后for循环遍历吗?
  其实python中有两个神奇的函数any()和all(),他们可以快速完成上面类似的任务!
  接下来,我们将分享 Python 的 any() 和 all() 函数,并使用简单的示例来了解它们的工作原理。
  Python 中的布尔数据类型
  在学习 any() 和 all() 之前,先快速回顾一下 Python 中的布尔数据类型。你可以在任何 Python 对象上调用bool() 以获取其真假值。如下代码示例:
  # 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,这是相当直观的。
  请记住:所有非零值和非空可迭代对象都为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
  如何用any() 函数检查字符串中的数字
  现在让我们使用 any() 函数来检查字符串中是否有任何数字。让我们把步骤写下来:
  1. 检查:字符串中是否有任何数字
  2. 遍历字符串以访问字符串中的每个字符
  3. 通过调用 isdigit() 方法检查每个字符是否是数字
  4. 如果被测字符是数字,则 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。我们使用列表推导式来根据字符是否为数字来获取 True 和 False 值的列表。
  my_string = "coding**is**cool**345"
  # 列表推导
  are_there_digits = [char.isdigit() for char in my_string]
  # 调用any函数
  print(any(are_there_digits))
  # 输出 True
  请注意 are_there_digits 是一个列表,其项数与字符串的长度一样多。
  对于字符串中的每个字符,都有一个对应的真假值——如果字符是数字,则为 True,如果字符不是数字,则为 False,如下所示:
  my_string = "coding**is**cool**345"
  # 列表推导
  are_there_digits = [char.isdigit() for char in my_string]
  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]
  如何用any()函数检查字符串中的字母
  让我们再举一个类似的例子。这一次,让我们检查字符串中的字母。
  被测试的字符串***456278)))是不包含字母的 -- 调用 any() 会按预期返回 False。对于字符串中的每个字符,调用isalpha() 方法检查它是否是一个字母。
  my_string = "***456278)))"
  num = [char.isalpha() for char in my_string]
  print(any(num))
  # Output False
  如何用any()函数将多个条件与逻辑 OR 组合在一起
  假设你有 N 个条件 c1、c2、c3...cN,考虑下面的伪代码:
  if c1 or c2 or ... c_(N-1) or CN:
      # DO THIS
      pass
  else:
      # DO THIS
      pass
  你现在可以将所有这些条件收集在一个可迭代对象中,例如列表或元组,然后对该可迭代对象调用 any() 以检查一个或多个条件是否为True,如下所示。是不是很简单?
  conditions = [c1, c2, ..., c_N]
  if any(conditions):
      # DO THIS
      pass
  else:
      # DO THIS
      pass
  如何使用 all() 函数
  让我们从 all() 函数的语法开始:
  语法:all(iterable)
  ·如果 bool(x) 对于可迭代对象中的所有值 x 为 True,则返回 True。
  · 如果可迭代对象为空,则返回 True。
  all() 函数接受一个可迭代对象作为参数,仅当可迭代对象中的所有项的计算结果为 True,或可迭代对象为空时才返回True。在所有其他情况下,all() 函数返回 False。
  如何用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 值。
  如何用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]
  如何用Pythonall()函数用逻辑 AND 组合多个条件
  假设你有 N 个条件 c1、c2、c3...cN,考虑下面的伪代码:
  if c1 and c2 and ... c_(N-1) and CN:
      # DO THIS
      pass
  else:
      # DO THIS
      pass
  你可以使用 all() 函数通过收集迭代中的条件,然后在迭代上调用 all() 函数来使这一切变得更加简洁。
  conditions = [c1, c2, ..., c_N]
  if all(conditions):
      # DO THIS
      pass
  else:
      # DO THIS
      pass
  总结
  希望本文能帮助你理解 Python 中的 any() 和 all() 函数。

TAG: 软件开发 Python

 

评分:0

我来说两句

Open Toolbar