2

私はPythonが初めてなので、基本的な質問を許してください。

400 個の float 要素を含む配列があり、最初の項と 2 番目の項を加算して 2 で割る必要があります。

私は次のようなことを試みていました:

x1=[0,...,399]

n = len(x1)

x2 = []

i = 0
for i in range(0,n): 
    x2[i]=(x1[i]+x1[i+1])/2

しかし、それは私にエラーを与えます:IndexError: list assignment index out of range

前もって感謝します。

4

4 に答える 4

3

ここでの問題は、リストの長さよりも大きいリスト内のインデックスに値を割り当てることができないことです。リストにアイテムを追加し続けたいだけなので、list.append()代わりに次のメソッドを使用します。

n = len(x1)

x2 = []

i = 0
for i in range(n-1): 
    x2.append((x1[i]+x1[i+1])/2)

また、範囲を 1 つ減らしたことに注意してください。そうしないx1[i+1]と、IndexError が発生します。

于 2012-06-19T17:20:51.953 に答える
1

リスト内包表記を使用した、より短く高速な1行のソリューション:

x1=range(0,400)  #use xrange if on python 2.7
x2=[(x1[i]+x1[i+1])/2 for i in range(len(x1)) if i<len(x1)-1]
于 2012-06-19T17:22:51.667 に答える
1

これを表現するために私が考えることができる最も簡潔な方法:

[(i + j)/2 for i, j in zip(xrange(400), xrange(1,400))]

または、同等に:

xs = range(400)
[(i + j)/2 for i, j in zip(xs, xs[1:])]

明らかに、Python3 ではxrange廃止されているため、代わりに使用できますrange。また、Python3 では のデフォルトの動作が/変更されるため、//整数が必要な場合は代わりに使用する必要があります。

于 2012-06-19T17:34:23.810 に答える
0

FP-pythonicの方法:

x1 = [1.0, 2.0, 3.0, 4.0, 5.0]
x2 = map(lambda x, y: (x + y) / 2, x1, [0] + x1[:-1])
于 2012-06-19T17:24:54.747 に答える