+;=Python中的列表
我目前正在处理图形遍历<代码>查找路径路径递增 类似于+;=Python中的列表,python,Python,我目前正在处理图形遍历查找路径路径递增 类似于path=path+[start]返回[30,3,5,8],而使用path查找路径2 类似递增的path+=[start]返回一个列表,其中包含find\u path2所具有的每个值 已经遍历,[30,3,4,0,1,2,5,8] 我猜+=的作用类似于append方法,其中aspath=path+[start] 是否需要重新分配 有人能解释一下path+=[start] 和path=path+[start] def find_path2(graph,
path=path+[start]
返回[30,3,5,8]
,而使用path查找路径2
类似递增的path+=[start]
返回一个列表,其中包含find\u path2
所具有的每个值
已经遍历,[30,3,4,0,1,2,5,8]
我猜+=
的作用类似于append方法,其中aspath=path+[start]
是否需要重新分配
有人能解释一下path+=[start]
和path=path+[start]
def find_path2(graph, start, end, path=[]):
path += [start]
if start == end:
return path
if not start in graph:
return None
for node in graph[start]:
if node not in path:
newpath = find_path2(graph, node, end, path)
if newpath: return newpath
return None
def find_path(graph, start, end, path=[]):
path = path + [start]
if start == end:
return path
if not start in graph:
return None
for node in graph[start]:
if node not in path:
newpath = find_path(graph, node, end, path)
if newpath: return newpath
return None
graph = {
0: [],
1: [],
2: [],
3: [4,2,5],
4: [0,1],
5:[8],
10:[5,6],
6:[],
30:[3]
}
print find_path(graph,30,8) #[30, 3, 5, 8]
print find_path2(graph,30,8) #[30, 3, 4, 0, 1, 2, 5, 8]
一个创建新列表(+),另一个修改原始列表(+=):
此外,如果您两次调用该函数,也会给您带来麻烦。您应该使用None作为参数值,并在第一次调用该函数时将其设置为空列表,而不是递归调用:
def find_path2(graph, start, end, path=None):
if path is None:
path = []
这实际上与+=
和list=list+[value]
之间的区别有些相同,如果每次调用函数时不创建新对象,则相同的对象/列表用于重复调用
path=path+[start]
创建一个新列表。对列表的现有引用不会更新,而+=
会在适当的位置修改列表+=
不仅仅是语法上的糖分append()
和+=
感兴趣,请点击此处:
def find_path2(graph, start, end, path=None):
if path is None:
path = []