2013-12-20 5 views
0

Я создаю newArrayList. Каждый из массива signalxOP минус с градиентом и несколько с каждым из массива applyFieldOP. (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' все еще быстрее, даже для коротких списков. Попробуйте 'timeit [x + y для x, y в zip (l, l)]' в 'ipython' и то же самое с' izip'. – Suor

Смежные вопросы