1

我是 python 新手,我想在这里理解一个基本错误。我在下面的代码中收到 TypeError: 'list' object is not callable 错误。有人可以解释一下我的代码有什么问题吗?

graph = {'a': ['b', 'c'], 'b': ['a', 'c'], 'c': ['b', 'd'], 'd': ['a'], 'e': ['a']}


def reachable(graph, node):
    res = [node]
    reachable = graph[node]
    for currentnode in reachable:
        if currentnode not in res :
            reachableNodes = reachable(graph,currentnode) << TypeError: 
            for newNode in reachableNodes:
                if newNode not in res :
                    res.append(newNode)
    return res 

错误:TypeError:“列表”对象不可调用错误

4

2 回答 2

8

您已经通过执行隐藏了函数名称reachable = graph[node]。使用不同的名称。

于 2012-04-08T20:03:53.653 回答
2

reachable是您递归调用的模块名称。

在第 3 行,当您说 时reachable = graph[node],它会覆盖reachable绑定到现在要链接到列表(或其他任何内容)的函数的变量。

在第 6 行,您尝试递归调用该函数时,它最终尝试调用列表,reachable但它失败了。

要解决此更改变量的名称,您打算将列表保留为不同于reachable

canreach = graph[node]
for currentnode in canreach:

还要仔细检查您的可达功能。存在无限递归的可能性。每次递归调用reachable时,都会创建res. 所以if currentnode not in res永远不会是假的。尝试将 res 作为参数传递,或将其用作全局参数。

于 2012-04-08T20:10:09.637 回答