首页 > 解决方案 > ValueError:要解包的值太多(预期为 2),而递归函数有 2 个值要返回

问题描述

我尝试计算枢轴和快速排序中的值之间的比较。但是当我使用 2 个返回值创建递归方法时,代码不喜欢它。那么任何人都可以帮助解决这个错误吗?或者知道另一种计算比较的方法?(没有全局变量)。

def myPartition(a, lo, hi, co):
    pivot = a[hi]
    i = (lo - 1)
    for j in range (lo, hi):
        co = co + 1
        if a[j] <= pivot:
            i = i + 1
            a[i], a[j] = a[j],a[i]
            
    a[i+1], a[hi] = a[hi],a[i+1]
    res_i = i+1
    
    return res_i, co

 
def myQuicksort_a(a, lo, hi, co):
    if lo >= hi:
        return a
    p, co_res_a = myPartition(a, lo, hi, co)
    print("co_res_a:",co_res_a)
    a, co_res_b = myQuicksort_a(a, lo, p-1, co_res_a)
#     a = myQuicksort(a, p+1, hi)
    return a, co_res_b

array = [0,3,5,2,4,1,2,3]
l = len(array)
result, counter = myQuicksort_a(array,0,l-1, 0)
print(result)
print(counter)

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-4-62d9d9dc7ae9> in <module>
     27 array = [0,3,5,2,4,1,2,3]
     28 l = len(array)
---> 29 result, counter = myQuicksort_a(array,0,l-1, 0)
     30 print(result)
     31 print(counter)

<ipython-input-4-62d9d9dc7ae9> in myQuicksort_a(a, lo, hi, co)
     21     p, co_res_a = myPartition(a, lo, hi, co)
     22     print("co_res_a:",co_res_a)
---> 23     a, co_res_b = myQuicksort_a(a, lo, p-1, co_res_a)
     24 #     a = myQuicksort(a, p+1, hi)
     25     return a, co_res_b

<ipython-input-4-62d9d9dc7ae9> in myQuicksort_a(a, lo, hi, co)
     21     p, co_res_a = myPartition(a, lo, hi, co)
     22     print("co_res_a:",co_res_a)
---> 23     a, co_res_b = myQuicksort_a(a, lo, p-1, co_res_a)
     24 #     a = myQuicksort(a, p+1, hi)
     25     return a, co_res_b

<ipython-input-4-62d9d9dc7ae9> in myQuicksort_a(a, lo, hi, co)
     21     p, co_res_a = myPartition(a, lo, hi, co)
     22     print("co_res_a:",co_res_a)
---> 23     a, co_res_b = myQuicksort_a(a, lo, p-1, co_res_a)
     24 #     a = myQuicksort(a, p+1, hi)
     25     return a, co_res_b

ValueError: too many values to unpack (expected 2)

标签: pythonquicksort

解决方案


您应该修复这部分代码

if lo >= hi:
    return a

myQuicksort_a函数中。因为一旦使用此路径,您的函数将返回一个而不是两个结果。因此,得到一个错误,这个值不能被分解成两个。


推荐阅读