簡體   English   中英

如何從遞歸 function 返回值?

[英]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() function 因為我想返回原始列表和排序列表。 我怎樣才能解決這個問題?

您的Quick_sort_random function 返回一個元組,但您只需要其中的第二項進行排序。 inner中的最后一行更改為:

return Quick_sort_random(left)[1] + [pivot] + Quick_sort_random(right)[1]

只需返回inner function 中的排序列表:

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]))

Output:

([4, 5, 1, 5, 2, 3], [1, 2, 3, 4, 5, 5])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM