2012-06-19 38 views
2

我是一個非常新的Python,所以請原諒我的基本問題。如何在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

預先感謝您。

+3

嘗試'x2.append((x1 [i] + x1 [i + 1])/ 2)' – astynax

+0

預期的輸出? –

+1

嘗試在範圍(n-1)中爲'i做':'。 –

回答

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

更短,更快的單行解決方案應用列表解析:

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] 
+0

爲什麼使用枚舉如果你不使用'x'? ISTM較短的listcomp方法是'[(x + y)/2.0 for x,y in zip(x1,x1 [1:])]''。 – DSM

+0

用'range'取代'enumerate',沒有使用zip,因爲這是我解決這個問題時想到的。 –

0

FP-Python的方式:

x1 = [1.0, 2.0, 3.0, 4.0, 5.0] 
x2 = map(lambda x, y: (x + y)/2, x1, [0] + x1[:-1]) 
+0

你是否在這裏使用'map'? – DSM

+0

@DMS,當然是 - 我的錯!謝謝。固定。 – astynax

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中,/的默認行爲發生了變化,因此如果需要整數,則必須使用//

相關問題