Python's zip, map, and lambda

A simple explanation

Let us assume that we have got a and b: two lists of integers. The goal is to merge them into one list, keeping whichever value is the largest at each index.

>> a = [1, 2, 3, 4, 5]
>> b = [2, 2, 9, 0, 9]

We can write a simple function that compares each item from a and b, then stores the largest in a new list as shown below:

def pick_the_largest(a, b):
    result = []  # A list of the largest values
    # Assume both lists are the same length
    list_length = len(a)
    for i in range(list_length):
        result.append(max(a[i], b[i]))
    return result

however the pythonic way to write is by a single line !

>> map(lambda pair: max(pair), zip(a, b))
[2, 2, 9, 4, 9]

Let us understand these functions one by one,

Zip

zip function takes two equal-length collections, and merges them together in pairs. If we use this on our a and b, we get,

>>> zip(a, b)
[
    (1, 2),
    (2, 2),
    (3, 9),
    (4, 0),
    (5, 9)
]

Lambda

lambda is a shorthand to create an anonymous function. It’s often used to create a one-off function (usually for scenarios when you need to pass a function as a parameter into another function). It can take a parameter, and it returns the value of an expression.

Now, assuming that we have a a pair of values, we can create a function that picks the larger of the pair:

>>> lambda pair: max(pair)

Map

map takes a function, and applies it to each item in an iterable (such as a list). Thus putting it all together we get the single line pythonic solution,

>>> map(  # apply the lambda to each item in the zipped list
        lambda pair: max(pair),  # pick the larger of the pair
        zip(a, b)  # create a list of tuples
    )
[2, 2, 9, 4, 9]

This example originally appeared here