当前位置: 首页 > 知识库问答 >
问题:

递归中的列表更新错误[网格中的机器人]Python

李经国
2023-03-14
def path_through_grid(grid):
  path = ["start"]
  helper(grid, 0, 0, path)
  print("final", path)
  if path[-1]=='end':
    return path
  else:
    return None

def helper(grid, r, c, path):
  print("start---", r, " - ", c, "path: ", path)
  if r == len(grid) or c == len(grid[0]):
    return
  if grid[r][c] == 1:
    return
  if r == len(grid)-1 and c == len(grid[0])-1:
    print("inside")
    path.append("end")
    return
  path.append("right")
  helper(grid, r, c+1, path)
  print("middle---", r, " - ", c, "path: ", path)
  if path[-1]=="end":
    print("inside 2", path)
    return
  path = path[:-1]
  print("after", path)
  path.append("down")
  helper(grid, r+1, c, path)
  print("end---", r, " - ", c, "path: ", path)

import unittest

class Test(unittest.TestCase):
  def test_path_through_grid(self):
    grid = [[0,1],
            [0,0]]
    self.assertEqual(path_through_grid(grid), ["start", "down", "right", "end"])

if __name__ == "__main__":
  unittest.main()

共有1个答案

席波娃
2023-03-14

问题出在这一行:

path = path[:-1]

这里指定给path,这是一个错误。您应该只变异路径,而不是分配给它。分配时,调用方的路径将不再受影响--您现在已经创建了一个不同的列表引用。

因此,请使用减小路径大小的方法

path.pop()
 类似资料:
  • 问题内容: 是否可以在Python中定义递归列表理解? 可能是一个简单的示例,但类似于: 这样有可能吗? 问题答案: 不,没有(记录,可靠,稳定,… ;-)引用“当前理解”的方法。您可以只使用一个循环: 当然,这是非常昂贵的(O(N平方)),因此您可以使用辅助工具对其进行优化(我假设将项目的顺序与中的项目顺序保持一致,否则可以做到;-)。 ..: 对于非常长的列表(O(N)而不是N平方),这要快得

  • 我试图编写一个递归方法来反转队列中的所有元素。 在实现队列的抽象类myQueue中 接口队列 在我的反向方法中,我的目标是不断地递归地从原始队列中退出队列(删除第一个元素),直到队列为空。每次我退出队列时,我都会将该对象放入一个临时队列中。当我的队列为空时,我将从临时队列重新排队到原始队列。 我的第一个问题是定义一个新的临时队列,在我的例子中是bufferQueue。我得到以下信息:

  • 我需要为链表队列实现一个toString()递归方法。我知道我的toString方法在我上周做的一个链表实现中工作得很好,所以我在处理它的队列方面出了问题。 我的QueueList的toString方法: 以及我的构造函数,例如QueueList: 我试图用这个测试看看里面发生了什么: 与输出 我意识到这是因为我说的是前面的在方法的递归部分,但即使我将其更改为,我的输出是 这可能与我的排队和退队方

  • 下面的代码尝试迭代excel文件,并将数据加载到

  • 我是编程新手,从Python开始。我的问题是关于链表,我为链表写了一个类,我需要做的是有一个函数,一个输入作为指向列表头部的引用。据我所知,'linked_list.Head',其中linked_list是有问题的列表的名称。具体使用递归,我试图找到列表的长度作为这个函数的输出。下面是我的代码,我不太明白如何移动到下一个节点,并在本例中使用递归返回节点数。

  • 在我的项目中,我有一个包含多个值的ComboBox。当我的应用程序开始时,我执行以下操作: 其中是字符串列表。 同时,在应用程序中,可以更改此值。但是,由于我已经将此组合框添加到我的GridPane中,然后在该值更改(gui.columns)时添加到场景中,因此新值没有显示在组合框中。因为我已经添加了旧的gui.course。有没有办法用新的gui.course_P更新createTestButt