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

S'entraîner aux questions d'entrevue de programmation en Python

Kirill Smirnov

Data Science Consultant, Altran

map()

map(                                                )
S'entraîner aux questions d'entrevue de programmation en Python

map()

map(                       Iterable1, Iterable2, ...)

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

S'entraîner aux questions d'entrevue de programmation 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'entraîner aux questions d'entrevue de programmation en Python

map() avec un seul itérable

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

L'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'entraîner aux questions d'entrevue de programmation en Python

map() avec un seul itérable

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

L'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érable

list(squares)
[1, 4, 9, 16, 25]
S'entraîner aux questions d'entrevue de programmation en Python

map() avec un seul itérable

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

L'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'entraîner aux questions d'entrevue de programmation en Python

map() avec des expressions lambda

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

L'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]

L'objectif : obtenir [1, 4, 9, 16, 25]

squares = map(lambda x: x**2, nums)
list(squares)
[1, 4, 9, 16, 25]
S'entraîner aux questions d'entrevue de programmation en Python

map() avec plusieurs itérables

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

L'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'entraîner aux questions d'entrevue de programmation en Python

filter()

filter(                     )
S'entraîner aux questions d'entrevue de programmation en Python

filter()

filter(             Iterable)

Itérable : [1, 2, 3, 4, 5]

S'entraîner aux questions d'entrevue de programmation en Python

filter()

filter(function(x), Iterable)

Itérable : [1, 2, 3, 4, 5]

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

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

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

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

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

S'entraîner aux questions d'entrevue de programmation en Python

Exemple de filter()

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

L'objectif : obtenir : [1, 2, 3]

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

fobj est itérable

for item in fobj:
    print(item)
1
2
3
S'entraîner aux questions d'entrevue de programmation en Python

Exemple de filter()

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

L'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érable

list(fobj)
[1, 2, 3]
S'entraîner aux questions d'entrevue de programmation en Python

Exemple de filter()

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

L'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'entraîner aux questions d'entrevue de programmation en Python

filter() avec des expressions lambda

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

L'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]

L'objectif : obtenir : [1, 2, 3]

fobj = filter(lambda x: x > 0, nums)
list(fobj)
[1, 2, 3]
S'entraîner aux questions d'entrevue de programmation en Python

reduce()

from functools import reduce

reduce(function(x, y), Iterable)

Itérable : [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'entraîner aux questions d'entrevue de programmation en Python

reduce()

from functools import reduce

reduce(function(x, y), Iterable)

Itérable : [1, 2, 3, 4, 5]

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

Combiner les deux premiers éléments de la liste

S'entraîner aux questions d'entrevue de programmation en Python

reduce()

from functools import reduce

reduce(function(x, y), Iterable)

Itérable : [1, 2, 3, 4, 5]

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

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

S'entraîner aux questions d'entrevue de programmation en Python

reduce()

from functools import reduce

reduce(function(x, y), Iterable)

Itérable : [1, 2, 3, 4, 5]

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

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

S'entraîner aux questions d'entrevue de programmation en Python

reduce()

from functools import reduce

reduce(function(x, y), Iterable)

Itérable : [1, 2, 3, 4, 5]

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

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

S'entraîner aux questions d'entrevue de programmation en Python

Exemple de reduce()

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

L'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'entraîner aux questions d'entrevue de programmation en Python

reduce() avec des expressions lambda

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

L'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]

L'objectif : obtenir : 1 – minimum

reduce(lambda x, y: x if x < y else y, nums)
1
S'entraîner aux questions d'entrevue de programmation en Python

Passons à la pratique !

S'entraîner aux questions d'entrevue de programmation en Python

Preparing Video For Download...