Python lambda with if but without else

前端 未结 4 1226
长发绾君心
长发绾君心 2021-01-30 20:49

I was writing some lambda functions and couldn\'t figure this out. Is there a way to have something like lambda x: x if (x<3) in python? As lambda a,b: a i

相关标签:
4条回答
  • 2021-01-30 21:26

    I found that filter provided exactly what I was looking for in python 2:

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

    The implementation is different in 2.x and 3.x: while 2.x provides a list, 3.x provides an iterator. Using a list comprehension might make for a cleaner use in 3.x:

    >>> data = [1, 2, 5, 10, -1]
    >>> [filter(lambda x: x < 3, data)]
    [1, 2, -1]
    
    0 讨论(0)
  • 2021-01-30 21:26

    What's wrong with lambda x: x if x < 3 else None?

    0 讨论(0)
  • 2021-01-30 21:32

    You can always try to invoke 'filter' for conditional checks. Fundamentally, map() has to work on every occurrence of the iterables, so it cannot pick and choose. But filter may help narrow down the choices. For example, I create a list from 1 to 19 but want to create a tuple of squares of only even numbers.

    x = list(range(1,20))
    
    y = tuple(map(lambda n: n**2, filter(lambda n: n%2==0,x)))
    
    print (y)
    
    0 讨论(0)
  • 2021-01-30 21:39

    A lambda, like any function, must have a return value.

    lambda x: x if (x<3) does not work because it does not specify what to return if not x<3. By default functions return None, so you could do

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

    But perhaps what you are looking for is a list comprehension with an if condition. For example:

    In [21]: data = [1, 2, 5, 10, -1]
    
    In [22]: [x for x in data if x < 3]
    Out[22]: [1, 2, -1]
    
    0 讨论(0)
提交回复
热议问题