繁体   English   中英

python中的递归排序

[英]recursive sorting in python

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

这是我认为您要尝试执行的操作:

def recursive_sort(a_list):
    def helper_function(list_to_be_sorted, list_already_sorted):
        new = []
        if len(list_to_be_sorted) == 0:
            return list_already_sorted
        else:    
            x = min(list_to_be_sorted)    
            list_to_be_sorted.remove(x)
            new.append(x)
            return helper_function(list_to_be_sorted, list_already_sorted + new)
    return helper_function(a_list, [])

您不应该为变量list命名,因为那是内置函数。

另外,如果您尝试实现递归排序功能,则可能需要查看quicksort ,这是一种非常常见(且快速)的递归排序算法。 您尝试实现的是选择排序的递归版本,它要慢得多。

另外,如果您实际上需要排序功能,而不仅仅是想要实现递归功能,则应使用list方法sort或可迭代sorted上的功能,这两种方法都将比您在其中进行的任何处理都快得多蟒蛇。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM