2017-10-09 144 views
0

我寫了下面的代碼,以設計一個返回每個可能的子串的大小列表中的一個算法:Python的IndexError:列表賦值超出範圍

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

'VSEQ [0 :len(list)] = [1]'將'vseq'擴展爲'[1]'。它不會創建與'list'具有相同長度的'1'元素的列表。切片分配*不重複元素*。 –

+0

是否要從字符串列表中返回最長字符串的長度? – user1190882

+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) 
相關問題