为什么返回True必须在if语句和for循环之外?

2024-06-16 13:17:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我想看看lst2是否与lst1相反

对于下面的代码,为什么return True必须在if语句之外。当我使用if语句放置else:returnfalse时,两个打印都返回True(这是不正确的)。谢谢大家!

def reversed_list(lst1, lst2):
  for index1 in range(len(lst1)):
    if lst1[index1] != lst2[(-1 - index1)]:
      return False
  return True


print(reversed_list([1, 2, 3], [3, 2, 1]))
print(reversed_list([1, 5, 3], [3, 2, 1]))

Tags: 代码trueforreturnifdef语句else
3条回答

如果将它放入if,即与return False相同的条件,但在它之后,它将永远不会执行,因为函数将始终保留第一个return。或者,它总是在if内执行,然后离开它,从而无意识地覆盖预期的False。这似乎是你正在观察的

如果将它放入循环中(但在if之外),它将在循环的第一次迭代期间执行,即太早了

如果将它放入循环中,但使用else,它仍然会过早执行。在非False的第一种情况下。这仍然不是您想要的,因为您只需要在循环中任何地方都没有False时使用True,而不是在第一种情况下使用False

如果循环完全通过而没有触发False,则只希望返回一个true boolean。你想要这样,因为否则你可能会错过错误的案例

这就是为什么在所示代码中,除了if和循环之外,您描述和使用的位置是唯一正确的方法

这种方法比暴力方法更轻

使用蛮力,第二个列表被反转,然后比较两个列表的所有元素。这浪费了大量的资源,尤其是如果列表很长的话

Q中提供的方法利用了指针,它本质上允许您“提前停止”,而不是对第二个列表进行排序,而是迭代元素并比较它们。如果它们匹配,则转到下一个元素。如果它们不匹配,则尽早转义并return False。使用这种方法,在比较列表中的所有元素之前,不能返回True。(因此,return True在for循环之外。)

return语句立即停止函数或方法的执行

这样,函数在第一个差处停止并返回False。如果所有被测试的元素都相等,那么循环结束时没有该return False语句,并继续执行下一个return True语句

相关问题 更多 >