Python lambda

We can create anonymous functions, known as lambda functions. Lambda functions are different from normal Python functions. This code shows the use of a lambda function:

#!/usr/bin/env python
f = lambda x : 2 * x
print f(3)

A return statements is never used in a lambda function, it always returns
something. A lambda functions may contain if statements:

#!/usr/bin/env python
f = lambda x: x > 10

map function

The definition of map is map(function,iterable). It applies a function to every item in the iteratable.  We can use map() to on a lambda function with a list:

#!/usr/bin/env python
list = [1,2,3,4,5]
squaredList = map(lambda x: x*x, list)

Anywhere you use lambda functions, you could use normal functions instead.  A lambda function is not a statement, it is an expression. Lambda functions do not support a block of statements.

filter function

filter(function,iterable) creates a new list from the elmeents for which the function returns True. Example:

#!/usr/bin/env python
list = [1,2,3,4,5,6,7,8,9,10]
newList = filter(lambda x: x % 2 == 0, list)

The returning list returns contains only the elements for which the lambda expression “lamba x: x % 2 == 0”  is true.

reduce function

The reduce function, reduce(function, iterable) applies two arguments cumulatively to the items of iterable, from left to right. Example:

#!/usr/bin/env python
list = [1,2,3,4,5]
s = reduce(lambda x,y: x+y,  list)

In this case the expression is always true, thus it simply sums up the elements of the list. Another example:

#!/usr/bin/env python
list = [10,6,7,5,2,1,8,5]
s = reduce(lambda x,y: x if (x > y) else y, list)


5 thoughts on “Python lambda

  1. Ian - August 22, 2015

    The following comments apply to python 3.4.3; I did not try anything with v 2.x.
    As Guest, Orri, points out: one must cast the return of the map function to a list, before one can print the output list. Therefore it is not a good idea to use “list” as a variable name, as it overwrites the list casting function. An alternative to Orri’s resolution is:

    List1 = [1,2,3,4,5]
    squaredList = list(map(lambda x: x*x, List1))

    A similar comment applies to the filter example and the following code fixes the problem:

    List2 = [1,2,3,4,5,6,7,8,9,10]
    newList = list(filter(lambda x: x % 2 == 0, List2))

    Finally, the function “reduce” does not seem to automatically available. One should at least import it; e.g.,

    from functools import reduce

    One doesn’t need to cast the result of applying reduce — at not in this example — since the result is a number which can readily be printed. Are there some other (interesting) examples involving “reduce”, where one would have to apply a cast?

  2. Orri - August 21, 2015

    For the map function, I ended up doing the following since the map function returns the map object, not the content of the list.

    #!/usr/bin/env python
    numbers = [1,2,3,4,5]
    squaredList = map(lambda x: x*x, numbers)
  3. Mimi - August 20, 2015

    printing list objects like print(newList) brings a .
    I have to rather do:
    for item in newList:

    1. Shlomo - November 23, 2015

      What is the output of the last example ? I run it and got 10 !
      I did not understand why ?

      1. Frank - November 23, 2015

        Correct, the output of the last example is 10. The program applies a comparison to every x and y from left to right.
        The statement ‘x if (x > y) else y’ is applied to every pair until no further reduction is possible. For example, if you have the list [1,3,10,4,1]
        it will return 10 because at some point it will compare ‘x=3, y=10: if (3 > 10) return 3 else return 10’. The program keeps repeating the statement ‘x if (x > y) else y’ until it cannot be applied further.