python中的mergesort给出错误消息“列表索引必须是整数,而不是元组”

时间:2015-06-07 15:04:16

标签: python list tuples mergesort

我无法理解从中得到的错误。 我在哪里定义了一个元组? 我该如何解决?

Lista应该是一个包含值和键[(key1,value1),(key2,value2),...)的列表。

sxdx是定义子列表和子列表结尾的整数。

这是程序

def merge(lista,sx,dx):
    cx = (sx + dx)/2
    i = sx
    j = cx + 1
    app = []
    while (i<=cx and j<=dx):
        if lista[i][1]<=lista[j][1]:
            app.append(lista[i])
            i += 1
        else:
            app.append(lista[j])
            j += 1
    while(i<=cx):
        app.append(lista[i])
        i += 1
    while(j<=dx):
        app.append(lista[j])
        j += 1
    for z,k in app,range(sx,dx+1):    
        lista[k][0] = z[0] #ERROR
        lista[k][1] = z[1]


def mergesort(lista, sx = 0, dx = -1):
    if dx == -1:
        dx = len(lista)
    cx = (sx + dx)/2
    if(sx<dx):
        mergesort(lista,sx,cx)
        mergesort(lista,cx+1,dx)
        merge(lista,sx,dx)

这是错误消息:

Traceback (most recent call last):
  File "occorrenze.py", line 78, in <module>
    mergesort(lista)
  File "occorrenze.py", line 55, in mergesort
    mergesort(lista,sx,cx)
  File "occorrenze.py", line 55, in mergesort
    mergesort(lista,sx,cx)
  File "occorrenze.py", line 55, in mergesort
    mergesort(lista,sx,cx)
  File "occorrenze.py", line 55, in mergesort
    mergesort(lista,sx,cx)
  File "occorrenze.py", line 55, in mergesort
    mergesort(lista,sx,cx)
  File "occorrenze.py", line 55, in mergesort
    mergesort(lista,sx,cx)
  File "occorrenze.py", line 57, in mergesort
    merge(lista,sx,dx)
  File "occorrenze.py", line 46, in merge
    lista[k][0] = z[0]
TypeError: list indices must be integers, not tuple

编辑:

  

我认为你想要的是 -

for z in range(sx,dx+1):
    lista[z] = app[z-sx]

谢谢Anand,你已经解决了我的第一个错误,现在我还有一个错误......

    if lista[i][0]<=lista[j][0]:
IndexError: list index out of range

1 个答案:

答案 0 :(得分:0)

我认为你想要的是 -

{{1}}

您也可以考虑更改以下行 -

{{1}}

{{1}}