2

我是 Python 的新手,所以请原谅我的基本问题。

我有一个包含 400 个浮点元素的数组,我需要将第一项与第二项相加并除以二。

我正在尝试类似的东西:

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

使用列表推导的更短更快的单行解决方案:

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 回答