# Map, Reduce & Filter

Most engineers work with lists to process list of orders/users etc. Analyzing lists can get complex and cluttered quickly if using multiple for-loops and nested loops. Hence these above methods can streamline usage of list operations.

## Map

If your task is to apply a specific method to each element of a list, map will come in handy. Say, you have a list of degree values and you’d like to convert all these values into list of values in Fahrenheit units.

#### Example Usage

``````inputs = [10,32,5,40,25]

def degreesToFahren(deg):
fahrenheit = (9.0/5)*deg +32
return fahrenheit

# The most common way of doing this
result=[]
for i in inputs:
iTofahren = degreesToFahren(i)
result.append(iTofahren)
print(result)   # [50.0, 89.6, 41.0, 104.0, 77.0]``````
``````# Using Map
result = list(map(degreesToFahren,inputs))
print(result) # [50.0, 89.6, 41.0, 104.0, 77.0]    ``````

As you might have noticed, using map is simply a one liner operation. Generally, if you have data = `[a1,a2,...,an]` and a function `f()`, then `map(f,data):`returns an iterator over `f(a1),f(a2)...f(an).` use `list()` to convert the iterator object into a python list.

## Filter

Filter function removes data in a list that you need/don’t need , hence the name. Say, you want to filter a list based on values that you don’t need, eg values above 2.

#### Example Usage

``````data = [1.2,2.5,5.8,0.4,4.7,9.9]
result = list(filter(lambda x:x > 2,data))
print(result) ``````

#### Output

``[2.5, 5.8, 4.7, 9.9]``

This is also a simple 1 liner similar to the map() function above. Refer to tutorial on lambda functions if you find this term unfamiliar.

## Reduce

From creator of Python, Guido van Rossum
`"Use functools.reduce if you really need it; however, 99% of the time an explicit for loop is more readable"`

What it generally does is apply a function `f()` to elements of data in a list and use that result for the next value in the list.
Visually,

Data = [a1,a2,…,an]
function = f(x,y)

reduce(f,data):
Step 1: val1 = f(a1,a2)
Step 2: val2 = f(val1,a3)
Step 3: val3 = f(val2 ,a4)
.
.
.
Step n-1: valn-1 = f(valn-2,an)

For example, you want to multiply all numbers in a list.

#### Example Usage

``````from functools import reduce

input = [1,2,3,4,5,6]
multiplier = lambda x,y:x*y
``720``