1. ホーム
  2. パイソン

[解決済み】なぜこの反復リスト成長コードはIndexError: list assignment index out of rangeを出すのでしょうか?

2022-04-04 02:29:22

質問

次のようなコードを考えてみてください。

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

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

print j

出力は(Python 2.6.6 on Win 7 32-bit) です。

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

何か単純に理解できないのでしょうね。どなたか教えてください。

どのように解決するのですか?

j は空のリストですが、あなたは要素 [0] はまだ存在しません。

代わりに次のようにして、新しい要素をリストの最後に追加してみてください。

for l in i:
    j.append(l)

もちろん、既存のリストをコピーしたいだけなら、実際にはこんなことはしないでしょう。ただやるだけだ。

j = list(i)

また、Pythonのリストを他の言語の配列のように使いたい場合は、要素をNULL値に設定したリストを事前に作成することもできます( None のように、特定の位置の値を上書きすることができます。

i = [1, 2, 3, 5, 8, 13]
j = [None] * len(i)
#j == [None, None, None, None, None, None]
k = 0

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

注意しなければならないのは list オブジェクトは、存在しないインデックスに値を割り当てることを許しません。