我试图在python中递归运行排序功能。我有一个空白列表,可以启动所有内容,但是每次尝试打印列表时,都会得到一个空白列表。这是我的代码。任何帮助将不胜感激
def parse(list):
newParse = []
if len(list) == 0:
return newParse
else:
x = min(list)
list.remove(x)
newParse.append(x)
return sort(list)
最佳答案
newParse
的值不会在函数调用之间保留;您将其设置为等于[]
(嗯,您正在创建一个值为[]
的新变量)。
由于您唯一回来的时间是
newParse = []
if len(list) == 0:
return newParse`
您将始终返回
[]
,因为那是那时newParse的值。因为您是递归执行此操作,所以您要重新调用该函数,而不保留该函数的自身状态。花一点时间考虑一下这对您的代码的影响。
代替初始化
newParse = []
,添加默认为假值的可选参数newParse
,如果收到newParse的假值,则设置newParse = []
。否则,您实际上每次都会获得相同的列表(即,对列表对象的内容进行了突变)。然后在您的尾叫中通过newParse
。您似乎还存在这样的问题,即您的定义和所谓的递归调用引用了不同的函数。
def sort(list, newParse = None):
if newParse is None:
newParse = []
if len(list) == 0:
return newParse
else:
x = min(list)
list.remove(x)
newParse.append(x)
return sort(list, newParse)