Я пытаюсь сделать «Path Finder»Path код Finder, __getitem__ TypeError
def find_all_paths(start, end, graph, path=[]):
path = path + [start]
if start == end:
return [path]
paths = []
for node in graph[start]:
if node not in path:
newpaths = find_all_paths(graph, node, end, path)
for newpath in newpaths:
paths.append(newpath)
return paths
graph={1: ['2'], 2: ['3', '4', '5'], 3: ['4'], 4: ['5', '6'], 5: [], 6: []}
вхожу find_all_paths(2,5,graph)
в оболочке я должен получить обратно все пути, которые идут от ключа 2 в словаре графа в то, что 5 значений правильный результат должен быть что-то вроде
path=[[2,5],[2,3,4,5][2,4,5]]
код продолжает давать значения ошибки, такие как
for node in graph[start]:
TypeError: 'int' object has no attribute '__getitem__'
может кто-то пожалуйста, помогите мне получить эту вещь работает
Вы должны избегать инициализации параметр с изменяемым значением, например 'list'. См. [Common Gotchas] (http://docs.python-guide.org/en/latest/writing/gotchas/#mutable-default-arguments) в руководстве The Hitchhiker для Python! –
используйте 'print()', чтобы проверить, что у вас есть в 'graph' - кажется, вы назначаете одиночный номер вместо списка или каталога. – furas
Рекурсивный вызов неверен: переданные аргументы не учитывают параметры. Замените следующим: 'newpaths = find_all_paths (node, end, graph, path)'. –