【问题标题】:How to get final verdict out of all returns in Python in a loop?如何在循环中从 Python 中的所有返回中获得最终判决?
【发布时间】:2023-04-06 19:19:01
【问题描述】:

抱歉,问了一个愚蠢的问题。 假设我想使用 for 循环比较两个列表的元素。现在我写道:-

for i in range(10):
     if a[i] == b[i]:
         print('True')
     else:
         print('False')

其中 a 和 b 是两个列表。

现在我将得到 10 个输出,它们要么是真要么是假。我想要的是,如果它们全部为真,则只打印 True,如果其中任何一个为假,则打印 false(True 或 False 只打印一次)。

这只是一个例子,我想用这个方法解决一些其他问题,也可以使用 for 循环。

请帮忙。

【问题讨论】:

  • 如果有些是真的有些是假的会发生什么?
  • @Jim "if any are False, print False" 应该回答这个问题
  • @JimFasarakisHilliard 有些是真的,有些是假的,那么输出应该是假的。只有当所有都为真时才必须打印真

标签: python python-3.x loops


【解决方案1】:

如果ab 包含“原始”(字符串、浮点数、整数等),您甚至不需要逐元素比较。 a == b 可以。

如果ab 包含实现__eq__ 的任意类的实例,这也将起作用。

否则,这可以通过将allzip 和生成器表达式组合在一个可读性强的单行中来实现:

print(all(a_elem == b_elem for a_elem, b_elem in zip(a, b)))

请注意,如果列表包含任意类的实例,则该类仍应实现 __eq__

allshort-circuited。一旦找到一对a_elem, b_elem

,它就会停止

其中a_elem != b_elem 并返回布尔值False

如果出于某种奇怪的原因,您想要获取字符串 'True''False',您可以将 all 的返回值转换为字符串:

print(str(all(a_elem == b_elem for a_elem, b_elem in zip(a, b))))

【讨论】:

    【解决方案2】:

    上面你想要的等价物可以写成:

    if all([a[i] == b[i] for i in range(10)]):
        print("True")
    else:
        print("False")
    

    这相当于:

    flag = True
    for i in range(10):
        flag = flag and a[i] == b[i]  # or flag &= a[i] == b[i] # since bool's are essentially binary
    if flag:
        print('True')
    else:
        print('False')
    

    具有适当边界检查的函数将是:

    def compare_lists(a, b, N):
        if len(a) >= N <= len(b):
            return all([a[i] == b[i] for i in range(N)])
        else:
            print('Oops!')
    

    内置的all() 函数查看传递的参数列表并返回True,所有参数都为True。将其视为一个大的“与”函数。

    您可以使用菊花链比较操作,因此 0 &lt; N &lt; 10 可以工作,而不必编写 0 &lt; N and N &lt; 10

    [ blah for blah in blah] 是一个非常强大的概念,称为列表理解,它允许您编写紧凑的代码。例如,如果您有一个列表nums = [1, 2, 3],您可以使用[i*i for i in nums] 创建一个正方形列表,这将给您[1, 4, 9]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-30
      • 1970-01-01
      • 2018-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多