如何放置返回语句以比较两个列表中的所有值?
Posted
技术标签:
【中文标题】如何放置返回语句以比较两个列表中的所有值?【英文标题】:How to place return statement for comparison of all values in two lists? 【发布时间】:2020-07-22 03:09:12 【问题描述】:早上好,我想找出比较两个列表时哪里出错了
def reversed_list(lst1, lst2):
for index in range(len(lst1)):
if (lst1[index] != lst2[len(lst2) - 1 - index]):
return False
else:
return True
#Uncomment the lines below when your function is done
print(reversed_list([1, 2, 3], [3, 2, 1]))
print(reversed_list([1, 5, 3], [3, 2, 1]))
但是我对这两个值都为 True。
在浏览 Codecacademy 论坛后,我认为问题在于我的函数只是执行一个比较,然后继续执行返回语句。
我该怎么做?我的印象是它必须遍历所有项目直到它到达末尾,但我想它会有多个布尔值。
我使用http://pythontutor.com/visualize.html#mode=edit 逐行遍历代码,但我仍然迷路了。谁能告诉我是否需要创建另一个对象来在迭代时保存布尔值,然后在最后比较它们,或者它是否放置了我的返回函数?
谢谢
【问题讨论】:
你的函数可以有更好的方法来比较它们。 语句return True
不应在 for 循环中。你应该只在完成整个循环后才返回 True。
【参考方案1】:
您的代码中的问题是您在循环的第一次迭代中返回(无论您的条件是True
还是False
,您的代码块中有return
)。
您应该将代码更改为:
def reversed_list(lst1, lst2):
for index in range(len(lst1)):
if (lst1[index] != lst2[len(lst2) - 1 - index]):
return False
return True
附带说明,更简单的解决方案是:
def reversed_list(lst1, lst2):
return lst1 == lst2[::-1]
【讨论】:
谢谢。我意识到我的退货位置不正确,这凸显了我采取的不正确的逻辑方法。正如 sahasrara62 所解释的,我需要以某种方式构建函数,如果在任何时候被比较的值不相等,则返回 false,否则转义到它之外的 return 语句,这将是 true,因为 return False 语句确实不触发 为什么不按照我在更简单的解决方案中建议的那样实现该功能?【参考方案2】:在函数调用中,一旦调用了return
,则返回语句之后的所有进程和代码流都不会处理,结果会传递给该返回语句中添加的任何一个。
在您的情况下,您正在尝试查找 list1 和 list2 的第一个和最后一个元素是否相同。如果不相同则返回 False,如果相同则返回 true。这是错误的,因为您只检查一个元素并仅根据该元素返回结果
实际的方法,你需要做的检查是从另一个列表中找到不等于元素的元素,如果一旦找到这样的元素(意味着不是反向列表),那么立即停止处理其他元素并返回 false。如果处理完所有元素并且没有出现错误条件,则表示该列表是可逆的,则返回 True
以下是您更正后的代码
# your code goes here
def reversed_list(lst1, lst2):
if len(lst1)!=len(lst2):
return False
for index in range(len(lst1)):
if (lst1[index] != lst2[len(lst2) - 1 - index]):
return False
return True
【讨论】:
谢谢,这成功了。据我了解您的帖子,一旦调用 return 语句并立即返回该值,我的函数就会停止。相反,我应该采取“如果在任何时候两个值不相等,则返回 false。否则它们都相等并返回 true”的方法。你解释的方式有道理!以上是关于如何放置返回语句以比较两个列表中的所有值?的主要内容,如果未能解决你的问题,请参考以下文章