2017-10-09 14 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:使用、乗算をすべて1値のリストを作成したい場合は

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

:len(list)] = [1] '' vseq'を '[1]'に展開します。 'list'と同じ長さの' 1'要素のリストを作成しません。スライスの割り当て*要素を繰り返さない*。 –

+0

文字列のリストから最長の文字列の長さを返しますか? – user1190882

+0

私は、最初のリストの各値の部分文字列長で全体のリストを返したい –

答えて

0

vseq[0:len(list)] = [1]は、長さがlen(list)のリストを作成しません。 vseq空のなので、割り当てスライスも空ですが、次に1つの要素を割り当てます。これは、右手側のリストと同じ長さのリストになり:

vseq = [1] * len(list) 
関連する問題