Я писал некоторые лямбда-функции и не мог понять этого. Есть ли способ иметь что-то вроде lambda x: x if (x<3)
в python? Поскольку lambda a,b: a if (a > b) else b
работает нормально. Пока lambda x: x < 3 and x or None
кажется самым близким, я нашел.
Python лямбда с if, но без других
Ответ 1
Лямбда, как и любая функция, должна иметь возвращаемое значение.
lambda x: x if (x<3)
не работает, потому что он не указывает, что возвращать, если не x<3
. По умолчанию функции возвращают None
, поэтому вы можете сделать
lambda x: x if (x<3) else None
Но, возможно, то, что вы ищете, - это понимание списка с условием if
. Например:
In [21]: data = [1, 2, 5, 10, -1]
In [22]: [x for x in data if x < 3]
Out[22]: [1, 2, -1]
Ответ 2
Что случилось с lambda x: x if x < 3 else None
?
Ответ 3
Извините, что реанимировал зомби.
Я искал ответ на тот же вопрос, и я обнаружил, что "фильтр" предоставил именно то, что я искал:
>>> data = [1, 2, 5, 10, -1]
>>> filter(lambda x: x < 3, data)
[1, 2, -1]
Реализация одинакова и для 2.x, и для 3.x: https://docs.python.org/2/library/functions.html#filter https://docs.python.org/3/library/functions.html#filter
Ответ 4
Вы всегда можете попытаться вызвать "фильтр" для условных проверок. По сути, map()
должен работать над каждым появлением итераций, поэтому он не может выбирать и выбирать. Но фильтр может помочь сузить выбор. Например, я создаю список от 1 до 19, но хочу создать квадраты из только четных чисел.
x = list(range(1,20))
y = tuple(map(lambda n: n**2, filter(lambda n: n%2==0,x)))
print (y)