Python IndexError:列表赋值超出范围

时间:2017-10-09 11:58:58

标签: python

我编写了以下代码,以便设计一个返回列表中每个可能子字符串大小的算法:

def ejercicio2(list):
    vseq = []
    vseq[0:len(list)] = [1]  # Pone valores de la lista a 1

    i = 1
    while i < len(list):
        aux = i - 1
        while aux >= 0:
            if list[i] > list[aux]: # Si el valor de la lista en i es mayor que el de aux
                vseq[i] = vseq[aux] + 1
                break
            aux -= 1
        i += 1
    return vseq

起初,我认为这应该可以正常工作,但每次我尝试运行它时都会出现下一个错误:

Traceback (most recent call last):
  File "prac1.py", line 17, in <module>
    ejercicio2([210, 816, 357, 107, 889, 635, 733, 930, 842, 542])
  File "prac1.py", line 10, in ejercicio2
    vseq[i] = vseq[aux] + 1
IndexError: list assignment index out of range

我知道这可能是一个容易解决的问题,但我似乎找不到解决方案,任何帮助都会受到赞赏。谢谢!

1 个答案:

答案 0 :(得分:0)

vseq[0:len(list)] = [1]不会创建长度为len(list)的列表。由于vseq 为空,因此分配切片也是空的,但您可以为其分配1个元素。这会产生一个与右侧列表长度相同的列表:

>>> import sys
>>> vseq = []
>>> vseq[0:sys.maxsize] = [1]
>>> vseq
[1]

如果要创建包含所有1值的列表,请使用乘法:

vseq = [1] * len(list)