如何放置返回语句以比较两个列表中的所有值?

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”的方法。你解释的方式有道理!

以上是关于如何放置返回语句以比较两个列表中的所有值?的主要内容,如果未能解决你的问题,请参考以下文章

比较python中的两个列表并返回匹配值的索引

如何比较python中的两个列表并返回匹配项

c# 比较两个对象的值是不是相等

递归比较两个列表

如何递归地分割列表并比较相邻的值

WPF比较两个数据表以查找匹配值