2016-07-10 8 views
1

次のコードを考慮してください。二乗リスト作成時のIndexError

start_list = [5, 3, 1, 2, 4] 
square_list = [] 
for i in start_list: 
    square_list.append(start_list[i]**2) 
print square_list 

このコードは、start_listを反復処理し、各二乗を四角形リストに追加するためのものです。だから、出力があることを意味する:

[25, 9, 1, 4, 16] 

その代わり、私が取得:

Traceback (most recent call last): 
    File "python", line 4, in <module> 
IndexError: list index out of range 

答えて

2

:平方iので、あなたは、iにそれらを割り当てます。ループ文

for i in start_list 
    square_list.append(start_list[i]**2) 
print square_list 

はSTART_LIST内のすべての値を与え、その後の文start_list[i]を使用するときに見られるようにSTART_LISTにおける指標としてそれらの値を持つ要素を検索します。 代わりに、それは読んでください:

for num in start_list: 
    square_list.append(num**2) 
print square_list 
+0

どうもありがとうございました。 ;) –

+0

あなたの大歓迎 –

1

あなたはstart_listとして指数を使用しています。最初の値は5ですが、start_list[5]はなく、IndexErrorとなります。 Python forループのタイプがForeach loopの場合、リストの内容が表示されます。

インデックスを値として使用しないでください。値を直接使用するのはです。あなたはSTART_LIST内の要素の位置としてSTART_LISTの値を使用している

square_list.append(i**2) 
0

をあなたはまた、リストの内包表記を使用することができます。

squarelist = [i**2 for i in start_list] 

、あるいはこれを:

squarelist = list(map(lambda x: x**2, start_list)) 
0

あなたが複数のゾルを使用することができます

squarelist = [x**2 for x in start_list] 

または:

squarelist = map(lambda x : x**2 , start_list) 

または:

squarelist = [] 
for x in start_list : 
    squarelist.append(x**2) 

それとも

square_list = [] 
for i in range(len(start_list)): 
    square_list.append(start_list[i]**2) 
print square_list 
+0

ええ、OPは 'list()'で2番目の解をラップする必要があります。 – RoadRunner

+0

map関数はリストを返す –