4

これはとても単純な問題なので、何が間違っているのかわかりません。基本的に、空のリスト内のアイテムを反復処理し、いくつかの基準に従って各アイテムを増やしたいと考えています。これは私がやろうとしていることの例です:

list1 = []
for i in range(5):
    list1[i] = list1[i] + 2*i

これはlist index out of rangeエラーで失敗し、立ち往生しています。期待される結果 (私が目指しているもの) は、値を持つリストになります。

[0, 2, 4, 6, 8]

より明確にするために、私はその特定のリストを作成した後ではありません. 問題は、空のリストの項目を再帰的に変更する方法についてです。ニブラーが以下に示したように、リストを初期化することが答えでした。乾杯。

4

6 に答える 6

8

Ruby (たとえば) では、リストの末尾を超えて項目を割り当てることができます。Python はそうではありません - このように list1 を初期化する必要があります

list1 = [0] * 5
于 2013-06-03T18:24:35.743 に答える
6

したがって、これを行うときは実際に i を使用しているので、i に対して計算を行い、そのように設定するだけです。すでに を持っている場合、リストに何が入るかを計算する必要はありませんi。したがって、リスト内包表記を行うだけです。

list1 = [2*i for i in range(5)]

あなたはそれがより複雑だと言っているので、リスト内包表記を使用しないでください。for ループを次のように編集します。

for i in range(5):
    x = 2*i
    list1[i] = x

このようにして、最終的に必要な結果が得られるまで作業を続け、それを変数に格納し、それに応じて設定することができます! で作成されたリストのように順序が整っていなくてもlist1.append(x)、どのリストでも機能するため、私は実際にこれを好みますrange

編集:あなたのように配列を操作できるようにしたいので、numpy を使用することをお勧めします! ベクトル化と呼ばれる素晴らしい機能があり、実際に関数を 1D 配列に適用できます。

import numpy as np
list1 = range(5)
def my_func(x):
    y = x * 2
vfunc = np.vectorize(my_func)
vfunc(list1)
>>> array([0, 2, 4, 6, 8])

これは、より複雑な関数にのみ使用することをお勧めします。これは、2 を掛けるなどの簡単なことにnumpy ブロードキャストを使用できるためです。

于 2013-06-03T18:24:39.580 に答える