我有两个几乎完全相同的“ for循环”功能,但只有其中一个有效。这是为什么?

时间:2019-01-12 08:08:36

标签: python python-3.x

我正在学习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。我怀疑这与循环有关。请解释为什么第二个功能不能正常工作。

2 个答案:

答案 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。实际上,它无法将13进行比较

如果想进一步了解快速失败算法