Вопрос

Я писал несколько лямбда-функций и не мог в этом разобраться.Есть ли способ получить что-то вроде lambda x: x if (x<3) на python?Как lambda a,b: a if (a > b) else b работает нормально.Пока что lambda x: x < 3 and x or None кажется, это самое близкое, что я нашел.

Это было полезно?

Решение

Лямбда, как и любая функция, должна иметь возвращаемое значение.

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]

Другие советы

Что не так с lambda x: x if x < 3 else None?

Извините, что это реаницировать зомби.

Я искал ответ на тот же вопрос, и я обнаружил, что «фильтр» предоставил именно то, что я искал:

>>> data = [1, 2, 5, 10, -1]
>>> filter(lambda x: x < 3, data)
[1, 2, -1]
.

Реализация такая же как в 2.x, так и в 3.x: https://docs.cython.org/2/library/functions.html#filter. https://docs.cython.org/3/library/functions.html#filter

Вы всегда можете попытаться вызвать «фильтр» для условных проверок.Принципиально генеракодицетагкод должен работать над каждым возникновением ейтена, поэтому он не может выбрать и выбрать.Но фильтр может помочь сузить выбор.Например, я создаю список от 1 до 19, но хочу создать кортеж of квадратов только даже номеров.

x = list(range(1,20))

y = tuple(map(lambda n: n**2, filter(lambda n: n%2==0,x)))

print (y)
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top