[英]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.