我是Python的新手,所以请原谅我的基本问题。
我有一个包含400个浮点元素的数组,我需要将第一个术语添加到第二个术语并除以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
提前谢谢。
答案 0 :(得分:3)
此处的问题是您无法为列表中的索引分配高于列表长度的值。由于您只想继续向列表中添加项目,请改用list.append()
方法:
n = len(x1)
x2 = []
i = 0
for i in range(n-1):
x2.append((x1[i]+x1[i+1])/2)
请注意,我还将范围减小了一个,否则x1[i+1]
将导致IndexError。
答案 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]
答案 2 :(得分: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中,/
的默认行为会发生变化,因此如果需要整数,则必须使用//
。
答案 3 :(得分: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])