Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
+;=Python中的列表_Python - Fatal编程技术网

+;=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方法,其中as
path=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]
    创建一个新列表。对列表的现有引用不会更新,而
    +=
    会在适当的位置修改列表
  • Python有很多优点,因此
    +=
    不仅仅是语法上的糖分
  • 此外,如果OP(@starl)对比较
    append()
    +=
    感兴趣,请点击此处:
    def find_path2(graph, start, end, path=None):
        if path is None:
            path = []