如何 return 来自递归函数的值?
How can I return values from a recursive function?
我的代码可以对值列表进行快速排序:
def Quick_sort_random(random_list):
r = random_list.copy()
def inner(r):
if len(r) < 2:
return r
p = random.randint(0, len(r) - 1)
pivot = r[p]
left = list(filter(lambda x: x <= pivot, r[:p] + r[p + 1:]))
right = list(filter(lambda x: x > pivot, r[:p] + r[p + 1:]))
return Quick_sort_random(left) + [pivot] + Quick_sort_random(right)
a = inner(r)
return random_list,a
这会引发错误:
TypeError: can only concatenate tuple (not "list") to tuple
我有 inner() 函数,因为我想 return 原始列表和排序后的列表。我该如何解决这个问题?
您的 Quick_sort_random
函数 returns 一个元组,但您只需要其中的第二项进行排序。将 inner
中的最后一行更改为:
return Quick_sort_random(left)[1] + [pivot] + Quick_sort_random(right)[1]
只是 return inner
函数中的排序列表:
import random
def Quick_sort_random(random_list):
r = random_list.copy()
def inner(r):
if len(r) < 2:
return r
p = random.randint(0, len(r) - 1)
pivot = r[p]
left = list(filter(lambda x: x <= pivot, r[:p] + r[p + 1:]))
right = list(filter(lambda x: x > pivot, r[:p] + r[p + 1:]))
unsorted_left, sorted_left = Quick_sort_random(left)
unsorted_right, sorted_right = Quick_sort_random(right)
return sorted_left + [pivot] + sorted_right
a = inner(r)
return random_list,a
print(Quick_sort_random([4,5,1,5,2,3]))
输出:
([4, 5, 1, 5, 2, 3], [1, 2, 3, 4, 5, 5])
我的代码可以对值列表进行快速排序:
def Quick_sort_random(random_list):
r = random_list.copy()
def inner(r):
if len(r) < 2:
return r
p = random.randint(0, len(r) - 1)
pivot = r[p]
left = list(filter(lambda x: x <= pivot, r[:p] + r[p + 1:]))
right = list(filter(lambda x: x > pivot, r[:p] + r[p + 1:]))
return Quick_sort_random(left) + [pivot] + Quick_sort_random(right)
a = inner(r)
return random_list,a
这会引发错误:
TypeError: can only concatenate tuple (not "list") to tuple
我有 inner() 函数,因为我想 return 原始列表和排序后的列表。我该如何解决这个问题?
您的 Quick_sort_random
函数 returns 一个元组,但您只需要其中的第二项进行排序。将 inner
中的最后一行更改为:
return Quick_sort_random(left)[1] + [pivot] + Quick_sort_random(right)[1]
只是 return inner
函数中的排序列表:
import random
def Quick_sort_random(random_list):
r = random_list.copy()
def inner(r):
if len(r) < 2:
return r
p = random.randint(0, len(r) - 1)
pivot = r[p]
left = list(filter(lambda x: x <= pivot, r[:p] + r[p + 1:]))
right = list(filter(lambda x: x > pivot, r[:p] + r[p + 1:]))
unsorted_left, sorted_left = Quick_sort_random(left)
unsorted_right, sorted_right = Quick_sort_random(right)
return sorted_left + [pivot] + sorted_right
a = inner(r)
return random_list,a
print(Quick_sort_random([4,5,1,5,2,3]))
输出:
([4, 5, 1, 5, 2, 3], [1, 2, 3, 4, 5, 5])