2016-03-12 2 views
2

Привет, ребята, я играл сегодня немного с python и немного запутался при использовании лямбда-fucntion. Моим первоначальным намерением было вычесть значение каждого элемента в векторе со значениями, составляющими второй вектор, и ввести все результаты в 3-й вектор. Пошел как это:Использование lambda в цикле for с zip()

v1=[1, 2, 3, 4] 
v2 =[7,2 ,7 ,6] 
v3=[x-y for x,y in zip(v1,v2)] 

тогда я хотя рассчитать, используя ту же структуру, абсолютное значение с помощью функции лямбды, и я попытался это:

v1=[1, 2, 3, 4] 
v2 =[7,2 ,7 ,6] 
[lambda x,y: x-y if x>y else y-x for x,y in zip(v1,v2)] 

это только дает ячейки памяти, я думаю. и я не знаю, почему, если я сделал не так?

+0

Это должно только дать вам список с одним элементом, являющимся объектом функции лямбда, правильно? –

+0

@NiklasR: Нет. Он дает список из 4 предметов, каждый из которых является лямбда-функцией. – zondo

ответ

3

Это дает вам набор функций lambda. Все, что вы сделали, определяет функцию, но вы ее никогда не называете. Вместо этого:

[(lambda x,y: x-y if x>y else y-x)(x,y) for x,y in zip(v1,v2)] 

Вам действительно не нужна функция. Просто сделайте это так:

[(x-y if x>y else y-x) for x,y in zip(v1,v2)] 
+0

Ohh thx это работает: D thx много :) также для супер быстрого ответа. –

+0

или использовать 'abs (x-y)' вместо 'if .. else..' – chapelo

+0

@chapelo: Да, определенно. Я не обращал особого внимания на то, что сделала функция лямбда. – zondo

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