(TypeError:无法解压缩不可迭代的int对象)



我正在尝试进行递归调用,以计数数字列表的反转次数

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

所以算法应该返回2。

我使用merge_sort方法进行了尝试。


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)

弹出错误:

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

哪里出了问题?有人能帮我吗?

您的compute_inversion(a(函数应该始终返回相同类型的值,一个list和一个int,即使在array_length<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

最新更新