web-dev-qa-db-ja.com

IndexError:リスト代入デッキが範囲外

次のコードを検討してください。

i = [1, 2, 3, 5, 8, 13]
j = []
k = 0

for l in i:
    j[k] = l
    k += 1

print j

出力(Windows 7 32ビット上のPython 2.6.6)は次のとおりです。

> Traceback (most recent call last): 
>     j[k] = l IndexError: list assignment index out of range

私は理解できない単純なことだと思います。誰かがそれを片付けることができますか?

163
Vladan

jは空のリストですが、最初の繰り返しで要素[0]に書き込もうとしていますが、まだ存在していません。

リストの最後に新しい要素を追加するには、代わりに次のことを試してください。

for l in i:
    j.append(l)
262
Steve Mayne

あなたの他のオプションはjを初期化することです:

j = [None] * len(i)
42
Rsh

j[k] = lの代わりにj.append(l)を実行し、kをまったく避けてください。

20
khachik

リスト内包表記を使うこともできます。

j = [l for l in i]

または次の文を使ってそのコピーを作成します。

j = i[:]
12
Jason Sundram
j.append(l)

また、小文字の "L"は、1と混同しやすいので、使用しないでください。

7
Tom

私はあなたが探しているのはPythonのメソッドinsertだと思います。

位置xに要素xを挿入します。

array = [1,2,3,4,5]

array.insert(1,2)

print(array)

# prints [1,2,2,3,4,5]
6
water

Jに辞書(連想配列に似たもの)を使うことができます

i = [1, 2, 3, 5, 8, 13]
j = {} #initiate as dictionary
k = 0

for l in i:
    j[k] = l
    k += 1

print j

印刷されます:

{0: 1, 1: 2, 2: 3, 3: 5, 4: 8, 5: 13}
5
Cedric

もう一つの方法:

j=i[0]
for k in range(1,len(i)):
    j = numpy.vstack([j,i[k]])

この場合、jは派手な配列になります

2
Alex

配列付きのpythonでは、要素を配列に追加して追加することしかできません。

1
Amartya Dutta

多分あなたは必要ですextend()

i=[1,3,5,7]
j=[]
j.extend(i)
0
Fred Moo

Jを空のリストとして割り当てており、ループ内でjの0番目のインデックス値を見つけようとしているので、確実に機能しません。 j.append(l)を試してくださいこれは動作します。

0
A.K Singh