我试图在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)

10-02 06:04