Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我会得到一个';值错误';尽管显式返回了预期的值数?_Python_Python 3.x - Fatal编程技术网

Python 为什么我会得到一个';值错误';尽管显式返回了预期的值数?

Python 为什么我会得到一个';值错误';尽管显式返回了预期的值数?,python,python-3.x,Python,Python 3.x,这是经过调整的合并排序,用于计算反转数。我的代码抛出了一个奇怪的错误 (我正在实现algos来学习python 3.x) 在第11行 在merge_sort first_sorted_half中,x=merge_sort(arr[:half]) [上一行重复了12次]值错误:值不足 打开包装(预计2个,得到1个) 即使我显式返回两个值?我是Python3新手,所以我想确切地了解这里发生了什么,我似乎在任何地方都找不到类似的问题。如果您能链接到python文档以了解更多信息,我们将不胜感激 def

这是经过调整的合并排序,用于计算反转数。我的代码抛出了一个奇怪的错误 (我正在实现algos来学习python 3.x)

在第11行

在merge_sort first_sorted_half中,x=merge_sort(arr[:half])
[上一行重复了12次]值错误:值不足 打开包装(预计2个,得到1个)

即使我显式返回两个值?我是Python3新手,所以我想确切地了解这里发生了什么,我似乎在任何地方都找不到类似的问题。如果您能链接到python文档以了解更多信息,我们将不胜感激

def merge_sort(arr):
    if len(arr) <= 1:
        return arr
    half = int(len(arr)/2)
    first_sorted_half, x = merge_sort(arr[:half])
    second_sorted_half, y = merge_sort(arr[half:])
    merged_halves, z = merge(first_sorted_half, second_sorted_half)

    return merged_halves, x + y + z


def merge(first_half, second_half):
    n = len(first_half) + len(second_half)
    i = 0
    j = 0
    split_inversions = 0
    ans = []
    for k in range(n):

        if i >= len(first_half):
            ans.append(second_half[j])
            j += 1
            continue
        if j >= len(second_half):
            ans.append(first_half[i])
            i += 1
            continue

        if first_half[i] > second_half[j]:
            ans.append(second_half[j])
            j += 1
            split_inversions += len(first_half) - i
        elif first_half[i] < second_half[j]:
            ans.append(first_half[i])
            i += 1

    return ans, split_inversions


numbers = [3,2,1,4,5,6,8,10,9]
print(merge_sort(numbers))
def merge_sort(arr):
如果len(arr)=len(前半部分):
ans.append(后半部分[j])
j+=1
持续
如果j>=len(下半部分):
ans.append(前半部分[i])
i+=1
持续
如果前半部分[i]>后半部分[j]:
ans.append(后半部分[j])
j+=1
分裂反演+=len(前半部分)-i
elif前半部分[i]<后半部分[j]:
ans.append(前半部分[i])
i+=1
返回ans,拆分_反转
数字=[3,2,1,4,5,6,8,10,9]
打印(合并\排序(数字))

您收到的错误表明,您的程序执行了12次递归调用,最后无法解压缩结果


这意味着,python希望您从
merge\u sort
返回两个值,因为您将结果解压为
first\u sorted\u half
x
。然而,当您仅从条件
len(arr)返回
arr时,ilke444是正确的-需要更多的澄清。首先:返回数据变量是您所需要的,但我对len(arr)不太了解,顺便说一句,您可能会以一种非常奇怪的方式得到语法错误。不完全是,arr只是我列表中的变量名。我唯一需要做的更改是返回arr,0表示我的基本情况(len(arr)
len('arr')
3