如何正确放置return语句以完成两个列表的全元素比较?
问题分析与解决方案
嗨,你的判断完全准确——问题根源就是return语句的位置不对!
你现在的代码在第一次循环时,只要第一个元素匹配就直接return True,完全没有检查后面的元素;如果第一个元素不匹配,就return False。这就导致不管后面的元素是什么,函数只会做一次比较就结束了:第二个测试用例里,lst1[0]是1,lst2的反向第一个元素也是1,所以直接返回True,根本没机会检查到第二个元素5和2的差异。
修正方案:调整return语句的位置
你不需要创建额外对象存储布尔值,只需要把return True移到循环外面即可:
def reversed_list(lst1, lst2): for index in range(len(lst1)): # 只要发现不匹配的元素,立刻返回False if lst1[index] != lst2[len(lst2) - 1 - index]: return False # 循环正常结束,说明所有元素都匹配,返回True return True # 测试用例 print(reversed_list([1, 2, 3], [3, 2, 1])) # 输出True print(reversed_list([1, 5, 3], [3, 2, 1])) # 输出False
逻辑解释:
- 循环遍历
lst1的每一个索引,逐一对比lst1[index]和lst2对应的反向位置元素; - 只要发现任意一对元素不匹配,立刻返回
False,终止函数(这样不用浪费时间遍历剩余元素,更高效); - 如果循环完整执行完毕,说明所有元素都匹配,此时才返回
True。
这样修改后,你的两个测试用例就能得到正确的结果啦!
内容的提问来源于stack exchange,提问作者SaintLaurent
相关产品推荐
相关产品推荐

