为什么python列表显示切片异常?

问题描述 投票:-1回答:1

我试图递归地对列表元素进行分区(如在分而治之中),因此打印切片的元素,但突然看到意外的异常(在输出的第6行及以后)。

def Mergesort(a, l, r):
    if(l<r):
      mid = (r+l+1) // 2
      print(a)
      Mergesort(a[l : mid], l, mid-1)
      Mergesort(a[mid : r+1], mid, r)

a = [8, 3, -2, 6, 7, 4, 1, 2, -1, 0, 9, 12, 11, 5] 
Mergesort(a, 0, len(a)-1)

输出:

[8, 3, -2, 6, 7, 4, 1, 2, -1, 0, 9, 12, 11, 5]
[8, 3, -2, 6, 7, 4, 1]
[8, 3, -2]
[3, -2]
[6, 7, 4, 1]
[1]
[]
[2, -1, 0, 9, 12, 11, 5]
[]
[]
[]
[]
[]
python recursion divide-and-conquer
1个回答
0
投票

这是因为l, r中的def Mergesort不精确。当您合并RHS数组a=[2, -1, 0, 9, 12, 11, 5]时,它实际上正在运行:Mergesort([2, -1, 0, 9, 12, 11, 5],7,10),而不是Mergesort([2, -1, 0, 9, 12, 11, 5],0,3)。由于len(a)= 7,它将仅返回一个空数组[]。我修改了代码:

© www.soinside.com 2019 - 2024. All rights reserved.