我正在学习Python中的循环,我试图制作一个函数,该函数接受2个相同长度的列表,并且如果lst1与反向的lst2相同,则返回True(否则返回false)。
例如:reversed_list([1、2、3],[3、2、1])应该返回True。
下面有2种几乎完全相同的编写此函数的方法,我认为它们都应正常工作,但是第二种方法虽然实际上与第一种完全相同,但却无法正常工作。
def reversed_list(lst1, lst2):
for index in range(len(lst1)):
if lst1[index] != lst2[len(lst2) - 1 - index]:
return False
else: return True
#tests
print(reversed_list([1, 2, 3], [3, 2, 1]))
#output = True (correct)
print(reversed_list([1, 2, 3], [4, 2, 1]))
#output = False (correct)
def reversed_list(lst1, lst2):
for index in range(len(lst1)):
if lst1[index] == lst2[len(lst2) - 1 - index]:
return True
else: return False
#tests
print(reversed_list([1, 2, 3], [3, 2, 1]))
#output = True (correct but it outputs True even if it should be False)
print(reversed_list([1, 2, 3], [4, 2, 1]))
#output = True (incorrect)
这两个函数之间的唯一区别是我将!=更改为==并相应地交换了True / False。但是,第二个函数即使应为False,也始终返回True。我怀疑这与循环有关。请解释为什么第二个功能不能正常工作。
答案 0 :(得分:3)
第一个发现较早停止,如果发现两个不匹配的项,则返回False
;否则返回True
。第二个条目提早停止,并在找到两个匹配的条目后立即返回True
-但是您的任务是验证所有条目,而在仅验证一个条目之后停止。基本上是在检查是否至少有一个匹配项,而不是检查整个列表是否匹配。
答案 1 :(得分:0)
第二个函数的问题是该函数将在找到匹配项后立即停止运行,而不是检查所有值并在发现不匹配的对时停止运行。
对于[1, 2, 3]
与[4, 2, 1]
的情况
这两行运行时:
if lst1[index] == lst2[len(lst2) - 1 - index]:
return True
第二个函数在index == 0
到达第一对项时,发现lst[0]
的值为1
,而lst2[len(lst2) - 1 - 0]
的值为{{ 1}}。它们确实匹配,所以函数返回true。实际上,它无法将1
与3
进行比较
如果想进一步了解快速失败算法。