【发布时间】:2017-01-17 22:00:27
【问题描述】:
这是经过调整以计算反转的合并排序。我的代码抛出一个奇怪的错误 (我正在实施算法来学习 python 3.x)。
在第 11 行,
在 merge_sort first_sorted_half 中,x = merge_sort(arr[:half])
[上一行重复了 12 次以上] ValueError: not enough values 解包(预期 2,得到 1)
即使我明确地返回两个值?我是 python 3 的新手,所以我想确切地了解这里发生了什么,我似乎在任何地方都找不到类似的问题。也将不胜感激提供指向 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))
【问题讨论】:
标签: python python-3.x