2013-12-20 58 views
0

我正在創建一個newArrayList。 signalxOP數組中的每個數組都減去漸變,每個appliedFieldOP數組都有多個。 (SignalxOP[] - Gradient) * appliedFieldOP[]處理多個數組值

我該怎麼做?以下是我嘗試的方法。它不斷給我錯誤。

signalxOP = [5,4,3,2,1] 
appliedFieldOP= [1,0.5,0,-0.5,-1] 
Gradient = 1.5 

newList = [[(x-Gradient)*y] for x,y in signalxOP,appliedFieldOP] 
py.plot(appliedFieldOP,newList) 
py.show() 

錯誤顯示

newList = [[(x-Gradient)*y] for x,y in signalxOP,appliedFieldOP] 
ValueError: too many values to unpack 

回答

4

可以使用zip功能,這樣

newList = [[(x-Gradient)*y] for x,y in zip(signalxOP,appliedFieldOP)] 
+0

一個大概應該使用['izip'](http://docs.python.org/ 2/library/itertools.html#itertools.izip)。但是,這對短名單並不重要。 – Suor

+0

@Suor:當你知道他們很短時,我會走得更遠,並說'zip'是_better_。走出去使用'izip'意味着你期待可能的大數據(並且你願意無條件地破壞3.x兼容性,可能會嚇到一些新手,並讓你的代碼稍微慢一些小數據這樣做),當你確信你有小列表時這是誤導性的。 – abarnert

+0

@abarnert'izip'仍然更快,即使是短名單。在'ipython'中試試'timeit [x + y for x,y in zip(l,l)]','和'izip'一樣。 – Suor