我编写了以下代码,以便设计一个返回列表中每个可能子字符串大小的算法:
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
我知道这可能是一个容易解决的问题,但我似乎找不到解决方案,任何帮助都会受到赞赏。谢谢!
答案 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)