• Aucun résultat trouvé

Python Map, filter et comprehension

N/A
N/A
Protected

Academic year: 2022

Partager "Python Map, filter et comprehension"

Copied!
9
0
0

Texte intégral

(1)

Python

Map, filter et comprehension

Nicolas Delestre

(2)

Contexte

Cr´ eer une nouvelle liste ` a partir d’une s´ equence (source) assez courant

algorithme fond´ e sur l’initialisation d’une liste r´ esultat (` a vide) et sur le parcours de la s´ equence donn´ ee avec le compl` etement de la liste r´ esultat en appliquant une formule ou en s´ electionnant des ´ el´ ements

Pour appliquer une formule

def mettre_au_carre_v0(l):

res = []

for ninl:

res.append(n ** 2)

Pour filtrer des ´ el´ ements

defselectionner_pairs_v0(l):

res = []

for ninl:

if n % 2 == 0:

(3)

G´ en´ eralisation

Pour appliquer une formule

def appliquer(l,

calcul=lambda x: x):

res = []

for ninl:

res.append(calcul(n)) return res

def mettre_au_carre_v1(l):

return appliquer(l,

lambda n: n**2)

Pour filtrer des ´ el´ ements

defselectionner(l,

a_garder=lambdax: True):

res = []

for ninl:

if a_garder(n):

res.append(n) return res

defselectionner_pairs_v1(l):

return selectionner(l,

lambdan: n % 2 == 0)

(4)

map et filter 1 / 2

map

permet d’appliquer une fonction (souvent une expression lambda) ` a chaque ´ el´ ement d’une s´ equence

syntaxe : map(fonction, s´ equence)

on obtient un objet it´ erable tels que les ´ el´ ements sont calcul´ es ` a la demande (yielding iterator )

def mettre_au_carre_v2(l):

return list(map(lambda n: n**2, l))

(5)

map et filter 2 / 2

filter

permet de s´ electionner les ´ el´ ements d’une s´ equence , ceux pour lesquels une condition est vrai

syntaxe : filter(fonction, liste)

comme map, filter retourne un objet, un yielding iterator

def selectionner_pairs_v2(l):

return list(filter(lambda n: n % 2, l))

(6)

Compr´ ehension

de s´ equence

syntaxe introduite avec python 2 : [foo(e) for e in sequence]

(foo(e) for e in sequence) {foo(e) for e in sequence}

{e:foo(e) for e in sequence}

´

equivalente (en terme de fonctionnalit´ e) aux fonctions map et filter plus pythonic

def mettre_au_carre_v3(l):

return [n**2 for n in l]

def selectionner_pairs_v3(l):

(7)

Performances 1 / 2

def benchmark_fonctions_un_parametre_naturel(nom_module, nom_fonctions, taille=10000000):

for nom_fonction in nom_fonctions:

code = f"from {nom_module} import {nom_fonction} as m; l=range({taille}); list(m(l))"

print(f"{nom_fonction}, {timeit.timeit(code, number=1)}")

def benchmark_mettre_au_carre(taille=10000000):

benchmark_fonctions_un_parametre_naturel("mapFilterComprehension", ["mettre_au_carre_v%d" % i for i in range(4)], taille)

def benchmark_selectionner_pairs(taille=10000000):

benchmark_fonctions_un_parametre_naturel("mapFilterComprehension", ["selectionner_pairs_v%d" % i for i in range(4)], taille)

if __name__ == "__main__":

benchmark_mettre_au_carre() benchmark_selectionner_pairs()

(8)

Performances 2 / 2

$ python mapFilterComprehension.py mettre_au_carre_v0, 3.116361833992414 mettre_au_carre_v1, 3.7307979429897387 mettre_au_carre_v2, 3.257178820000263 mettre_au_carre_v3, 2.8759335440117866 selectionner_pairs_v0, 0.714096306997817 selectionner_pairs_v1, 1.249474090989679 selectionner_pairs_v2, 0.8969143869762775 selectionner_pairs_v3, 0.5892258970125113

(9)

Conclusion

Quatre fa¸cons d’appliquer un traitement ou de s´ electionner des ´ el´ ements d’une s´ equence :

algorithmes classiques

algorithmes classiques g´ en´ eralis´ es : appliquer, selectionner fonctions de base de python : map et filter

compr´ ehension

Favoriser les compr´ ehensions car : plus lisibles, plus pythonic

elles peuvent produire diff´ erents types de s´ equences

plus rapides

Références

Documents relatifs

Il est possible de d´ emontrer que si on applique successivement des translations et des rotations dans le plan, alors on obtient un d´ eplacement qui peut ˆ etre donn´ e soit par

Médecine légale, diplômé réparation juridique du dommage corporel Service Médecine Interne - Centre Hospitalier Régional. 1 rue Porte Madeleine - 45032 ORLEANS CEDEX

Q6 Au moyen d’une int´egration par parties soigneusement justifi´ ee, exprimez J n+2 en fonction de

Un espace topologique E est compl` etement r´ egulier si et seule- ment si il est plong´ e dans un espace topologique compact K, c’est ` a dire qu’il existe une application

Si la pi`ece est trop petite, elle est d´efinitivement perdue, si elle est trop grande on peut la rectifier et le coˆ ut de cette op´eration est de 0, 10 euros

Lorsque le nombre maximal d’it´ erations est atteint avant que la pr´ ecision voulue ne soit obtenue, afficher un message d’erreur signalant que la m´ ethode de Newton n’a

En alg` ebre lin´ eaire, une matrice de Vandermonde est une matrice avec une progression g´ eom´ etrique dans

On appelle alors Y la variable al´ eatoire qui, ` a tout lot de 50 fioles, associe le nombre de fioles d´ efectueuses.. On assimile les pr´ el` evements de 50 fioles ` a des tirages