Pergunta

Eu estava escrevendo algumas funções lambda e não conseguia entender isso.Existe uma maneira de ter algo como lambda x: x if (x<3) em python?Como lambda a,b: a if (a > b) else b funciona ok.Tão longe lambda x: x < 3 and x or None parece ser o mais próximo que eu encontrei.

Foi útil?

Solução

Um lambda, como qualquer função, deve ter um valor de retorno.

lambda x: x if (x<3) não funciona porque ele não especifica o que o retorno se não x<3.Por padrão, funções de retorno None, assim que você poderia fazer

lambda x: x if (x<3) else None

Mas talvez o que você está procurando está uma lista de compreensão com um if condição.Por exemplo:

In [21]: data = [1, 2, 5, 10, -1]

In [22]: [x for x in data if x < 3]
Out[22]: [1, 2, -1]

Outras dicas

O que há de errado com lambda x: x if x < 3 else None?

Desculpe ressuscitar um zumbi.

Eu estava procurando uma resposta para a mesma questão, e achei que o "filtro" proporcionou exatamente o que eu estava procurando:

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

A implementação é a mesma em ambos os 2.x e 3.x:https://docs.python.org/2/library/functions.html#filter https://docs.python.org/3/library/functions.html#filter

Você pode sempre tentar chamar 'filtro' para condicional verifica.Fundamentalmente, map() tem que trabalhar em cada ocorrência da iterables, por isso não é possível escolher.Mas o filtro pode ajudar a restringir as escolhas.Por exemplo, vou criar uma lista de 1 a 19, mas pretende criar uma tupla de praças de apenas números.

x = list(range(1,20))

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

print (y)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top