Функция с аргументами в двух списках - PullRequest
30 голосов
/ 08 февраля 2012

У меня есть два списка xscat и yscat. Я хотел бы, чтобы понимание списка подбирало x и y в xscat и yscat соответственно. Результирующий список должен содержать peaks([x[0], y[0]]), peaks([x[1], y[1]]) и т. Д.

xscat=yscat=[-1, -1.5,5]
[peaks([x,y]) for x,y in xscat,yscat]

Можете ли вы найти какое-либо решение, используя понимание? или другие способы поставить его (карту)?

Ответы [ 4 ]

44 голосов
/ 08 февраля 2012

zip - это то, что вы хотите:

[peaks([x,y]) for x,y in zip(xscat,yscat)]
11 голосов
/ 08 февраля 2012

Вам нужно использовать zip:

[peaks([x,y]) for (x,y) in zip(xscat, yscat)]
8 голосов
/ 08 февраля 2012

Я предполагаю из вашего примера, что вы хотите использовать zip (), но на тот случай, если вы действительно хотите сделать, это перебрать ВСЕ возможные комбинации xscat и yscat, тогда у вас есть больше работы ...

Итак, если вы хотите (xscat [0], yscat [0]), (xscat [0], yscat [1]), (xscat [0], yscat [2]) и т. Д., Вы можетесначала выполните вложенное понимание:

((x, y) для x в xscat для y в yscat)

сгенерирует ВСЕ пары и

[пики (x, y) для x в xscat для y в yscat]

должны дать решение, если вы хотите все перестановки.

Кроме того, позаботьтесь оzip / map - вы получите отличные результаты от тех, если списки (xscat и yscat) не имеют одинаковую длину - убедитесь, что выбрали тот, который дает то решение, которое вам нужно.

3 голосов
/ 08 февраля 2012

Попробуйте почтовый индекс: http://docs.python.org/library/functions.html#zip

[peaks(x) for x in zip(zscat, yscat)]

Редактировать

Предполагается, что пики могут принимать кортеж.

...