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