Que sont les fonctions map(), filter(), reduce() ?

S’exercer aux questions d’entretien de code en Python

Kirill Smirnov

Data Science Consultant, Altran

map()

map(                                                )
S’exercer aux questions d’entretien de code en Python

map()

map(                       Iterable1, Iterable2, ...)

Itérables : [1, 2, 3, 4, 5], [10, 20, 30, 40, 50], ...

S’exercer aux questions d’entretien de code en Python

map()

map(function(x1, x2, ...), Iterable1, Iterable2, ...)

Itérables : [1, 2, 3, 4, 5], [10, 20, 30, 40, 50], ...

1, 10, ... $\rightarrow$ function(1, 10, ...) $\rightarrow$ nouvel objet

2, 20, ... $\rightarrow$ function(2, 20, ...) $\rightarrow$ nouvel objet

3, 30, ... $\rightarrow$ function(3, 30, ...) $\rightarrow$ nouvel objet

4, 40, ... $\rightarrow$ function(4, 40, ...) $\rightarrow$ nouvel objet

5, 50, ... $\rightarrow$ function(5, 50, ...) $\rightarrow$ nouvel objet

S’exercer aux questions d’entretien de code en Python

map() avec un seul Iterable

nums = [1, 2, 3, 4, 5]

Objectif : obtenir [1, 4, 9, 16, 25]

def squared(x):
    return x**2
squares = map(squared, nums)
print(squares)
<map object at 0x7fdbe4ab3da0>

squares est itérable

for square in squares:
    print(square)
1
4
9
16
25
S’exercer aux questions d’entretien de code en Python

map() avec un seul Iterable

nums = [1, 2, 3, 4, 5]

Objectif : obtenir [1, 4, 9, 16, 25]

def squared(x):
    return x**2
squares = map(squared, nums)
print(squares)
<map object at 0x7fdbe4ab3da0>

squares est un Iterable

list(squares)
[1, 4, 9, 16, 25]
S’exercer aux questions d’entretien de code en Python

map() avec un seul Iterable

nums = [1, 2, 3, 4, 5]

Objectif : obtenir [1, 4, 9, 16, 25]

def squared(x):
    return x**2
squares = map(squared, nums)
print(squares)
<map object at 0x7fdbe4ab3da0>

squares est un itérateur

next(squares)
1
next(squares)
4
S’exercer aux questions d’entretien de code en Python

map() avec des expressions lambda

nums = [1, 2, 3, 4, 5]

Objectif : obtenir [1, 4, 9, 16, 25]

def squared(x):
    return x**2
squares = map(squared, nums)
list(squares)
[1, 4, 9, 16, 25]
nums = [1, 2, 3, 4, 5]

Objectif : obtenir [1, 4, 9, 16, 25]

squares = map(lambda x: x**2, nums)
list(squares)
[1, 4, 9, 16, 25]
S’exercer aux questions d’entretien de code en Python

map() avec plusieurs Iterables

nums1 = [1, 2, 3, 4, 5]
nums2 = [10, 20, 30, 40, 50]

Objectif : obtenir : [1*10, 2*20, 3*30, 4*40, 5*50] = [10, 40, 90, 160, 250]

mult = map(lambda x, y: x*y, nums1, nums2)
list(mult)
[10, 40, 90, 160, 250]
S’exercer aux questions d’entretien de code en Python

filter()

filter(                     )
S’exercer aux questions d’entretien de code en Python

filter()

filter(             Iterable)

Iterable : [1, 2, 3, 4, 5]

S’exercer aux questions d’entretien de code en Python

filter()

filter(function(x), Iterable)

Iterable : [1, 2, 3, 4, 5]

1 $\rightarrow$ function(1) $\rightarrow$ True $\rightarrow$ 1 est conservé

2 $\rightarrow$ function(2) $\rightarrow$ False $\rightarrow$ 2 est rejeté

3 $\rightarrow$ function(3) $\rightarrow$ True $\rightarrow$ 3 est conservé

4 $\rightarrow$ function(4) $\rightarrow$ False $\rightarrow$ 4 est rejeté

5 $\rightarrow$ function(5) $\rightarrow$ True $\rightarrow$ 5 est conservé

S’exercer aux questions d’entretien de code en Python

Exemple : filter()

nums = [-3, -2, -1, 0, 1, 2, 3]

Objectif : obtenir : [1, 2, 3]

def positive(x):
    return x > 0
fobj = filter(positive, nums)
print(fobj)
<filter object at 0x7f196d378d68>

fobj est un Iterable

for item in fobj:
    print(item)
1
2
3
S’exercer aux questions d’entretien de code en Python

Exemple : filter()

nums = [-3, -2, -1, 0, 1, 2, 3]

Objectif : obtenir : [1, 2, 3]

def positive(x):
    return x > 0
fobj = filter(positive, nums)
print(fobj)
<filter object at 0x7f196d378d68>

fobj est un Iterable

list(fobj)
[1, 2, 3]
S’exercer aux questions d’entretien de code en Python

Exemple : filter()

nums = [-3, -2, -1, 0, 1, 2, 3]

Objectif : obtenir : [1, 2, 3]

def positive(x):
    return x > 0
fobj = filter(positive, nums)
print(fobj)
<filter object at 0x7f196d378d68>

fobj est un itérateur

next(fobj)
1
next(fobj)
4
S’exercer aux questions d’entretien de code en Python

filter() avec des expressions lambda

nums = [-3, -2, -1, 0, 1, 2, 3]

Objectif : obtenir : [1, 2, 3]

def positive(x):
    return x > 0
fobj = filter(positive, nums)
list(fobj)
[1, 2, 3]
nums = [-3, -2, -1, 0, 1, 2, 3]

Objectif : obtenir : [1, 2, 3]

fobj = filter(lambda x: x > 0, nums)
list(fobj)
[1, 2, 3]
S’exercer aux questions d’entretien de code en Python

reduce()

from functools import reduce

reduce(function(x, y), Iterable)

Iterable : [1, 2, 3, 4, 5]

[1, 2, 3, 4, 5] $\rightarrow$ nouvel objet du même type que le contenu

La représentation de la liste donnée

S’exercer aux questions d’entretien de code en Python

reduce()

from functools import reduce

reduce(function(x, y), Iterable)

Iterable : [1, 2, 3, 4, 5]

[1, 2, 3, 4, 5] $\rightarrow$ nouvel objet du même type que le contenu

Combinaison des deux premiers éléments de la liste

S’exercer aux questions d’entretien de code en Python

reduce()

from functools import reduce

reduce(function(x, y), Iterable)

Iterable : [1, 2, 3, 4, 5]

[1, 2, 3, 4, 5] $\rightarrow$ nouvel objet du même type que le contenu

Combinaison du résultat avec le troisième élément de la liste

S’exercer aux questions d’entretien de code en Python

reduce()

from functools import reduce

reduce(function(x, y), Iterable)

Iterable : [1, 2, 3, 4, 5]

[1, 2, 3, 4, 5] $\rightarrow$ nouvel objet du même type que le contenu

Combinaison du résultat avec le quatrième élément de la liste

S’exercer aux questions d’entretien de code en Python

reduce()

from functools import reduce

reduce(function(x, y), Iterable)

Iterable : [1, 2, 3, 4, 5]

[1, 2, 3, 4, 5] $\rightarrow$ nouvel objet du même type que le contenu

Combinaison du résultat avec le cinquième élément de la liste

S’exercer aux questions d’entretien de code en Python

Exemple : reduce()

nums = [8, 4, 5, 1, 9]

Objectif : obtenir : 1 — minimum

def smallest(x, y):
    if x < y:
        return x
    else:
        return y
reduce(smallest, nums)
1

smallest(8, 4) $\rightarrow$ 4

smallest(4, 5) $\rightarrow$ 4

smallest(4, 1) $\rightarrow$ 1

smallest(1, 9) $\rightarrow$ 1 — résultat final

S’exercer aux questions d’entretien de code en Python

reduce() avec des expressions lambda

nums = [8, 1, 4, 2, 9]

Objectif : obtenir : 1 — minimum

def smallest(x, y):
    if x < y:
        return x
    else:
        return y
reduce(smallest, nums)
1
nums = [8, 1, 4, 2, 9]

Objectif : obtenir : 1 — minimum

reduce(lambda x, y: x if x < y else y, nums)
1
S’exercer aux questions d’entretien de code en Python

Passons à la pratique !

S’exercer aux questions d’entretien de code en Python

Preparing Video For Download...