Python (TypeError:无法解压缩不可iterable int对象)用于使用合并排序的反转计数器

Python (TypeError:无法解压缩不可iterable int对象)用于使用合并排序的反转计数器,python,Python,我正在尝试做一个递归调用,以反求一系列数字的倒数 例如:[3,1,2,4]这两个倒数是(3,1)和(3,2) 因此算法应该返回2 我使用merge\u排序方法尝试了这个方法 def merge(x,y,last_inversion_sum): x_length = len(x) y_length = len(y) n = x_length+y_length i=j=0 inversion = 0 merged_list = [] whi

我正在尝试做一个递归调用,以反求一系列数字的倒数

例如:
[3,1,2,4]
这两个倒数是
(3,1)
(3,2)

因此算法应该返回2

我使用merge\u排序方法尝试了这个方法



def merge(x,y,last_inversion_sum):
    x_length = len(x)
    y_length = len(y)
    n = x_length+y_length
    i=j=0
    inversion = 0
    merged_list = []
    while i<x_length and j <y_length:
        if x[i]>y[j]:
            merged_list.append(y[j])
            j+=1
        else:
            merged_list.append(x[i])
            i+=1
            inversion+=1

    if i == x_length:
        merged_list.extend(y[j:])
    else:

        merged_list.extend(x[i:])

    inversion = inversion+last_inversion_sum
    return merged_list,inversion


def compute_inversion(a):
    array_length = len(a)
    if array_length<=1: return 0

    L,inversion1 = compute_inversion(a[:int(array_length / 2)])
    R,inversion2 = compute_inversion(a[int(array_length / 2):])
    inversion_sum = inversion1+inversion2

    return merge(L,R,inversion_sum)

lizt = [3,2,1,5]

_,inversion_num = compute_inversion(lizt)
print(inversion_num)

def合并(x,y,最后一次求和):
x_长度=长度(x)
y_长度=长度(y)
n=x_长度+y_长度
i=j=0
反转=0
合并的_列表=[]

虽然我你的计算反转(a)函数应该总是返回相同类型的值,一个列表和一个int,即使当数组长度你返回一个
int
对象,而不是元组,当
array\n你为什么在它里面调用计算反转函数?
Traceback (most recent call last):
  File "D:/A.LXR/inversion.py", line 40, in <module>
    _,inversion_num = compute_inversion(lizt)
  File "D:/A.LXR/inversion.py", line 32, in compute_inversion
    L,inversion1 = compute_inversion(a[:int(array_length / 2)])
  File "D:/A.LXR/inversion.py", line 32, in compute_inversion
    L,inversion1 = compute_inversion(a[:int(array_length / 2)])
TypeError: cannot unpack non-iterable int object

Process finished with exit code 1
def compute_inversion(a):
    array_length = len(a)
    if array_length<=1: return a, 0

    L,inversion1 = compute_inversion(a[:int(array_length / 2)])
    R,inversion2 = compute_inversion(a[int(array_length / 2):])
    inversion_sum = inversion1+inversion2

    return merge(L,R,inversion_sum)
3