Comments on: map(), filter() et reduce () ? http://sametmax.com/map-filter-et-reduce/ Du code, du cul Mon, 28 Oct 2019 11:54:55 +0000 hourly 1 https://wordpress.org/?v=4.9.7 By: Sam http://sametmax.com/map-filter-et-reduce/#comment-193984 Tue, 01 May 2018 14:01:14 +0000 http://sametmax.com/?p=7791#comment-193984 Reduce est toujours dur à comprendre et à débugger. Et les intensions sous toujours plus rapides à exécuter car on évide un appel de fonction. Après si tu as déjà la fonction déclarée, un map est plus direct.

]]>
By: Cyrile http://sametmax.com/map-filter-et-reduce/#comment-193966 Mon, 30 Apr 2018 10:08:25 +0000 http://sametmax.com/?p=7791#comment-193966 Oui il est vrai qu’on pourrait faire un truc du genre :

a = (ii**2 for ii in range(1000))

b = (ii for ii in a if ii%2==0)

c = (ii/3 for ii in b)

...

y = ...

z = reduce(lambda a, b: a/b, y, 12)

Alors là c’est peut-être personnel… mais je trouve que l’écriture avec les map dans ce cas est plus facilement lisible… nope ?

Surtout que je pense que derrière le code doit être sensiblement identique, car au final le map dans python 3 est un simple mapage sur un yield, nope ?

Enfin, dernier argument que je trouve en faveur des mot clef map, filter et reduce, c’est d’être raccord avec un certain nombre d’autres langages (Java 8/9 avec l’API Stream, Scala, Spark, etc.) et ainsi peut-être de faciliter la transition avec ces langages et Python (et vice-versa) ;-)

]]>
By: Sam http://sametmax.com/map-filter-et-reduce/#comment-193944 Sat, 28 Apr 2018 21:50:55 +0000 http://sametmax.com/?p=7791#comment-193944 Les expressions génératrices font pareille.

]]>
By: Cyrile http://sametmax.com/map-filter-et-reduce/#comment-193929 Fri, 27 Apr 2018 19:37:38 +0000 http://sametmax.com/?p=7791#comment-193929 Salut,

Je vois également un autre intérêt aux map, filter et deduce et de celui de chainer des opérations sur des itérables sans consommer un mémoire. Par exemple je peux faire :

a = map(lambda x: x**2, range(10000))

b = filter(lambda x: x%2 == 0, a)

c = map(lambda x: x/3, b)

z = reduce(lambda a, b: a/b, y, 12)

print(z)

Finalement la fonction terminale fera qu’une seule passe sur l’itérable du début ne coûtant ainsi rien en espace RAM et avec d’excellentes performances… Çà peut être très utile si on manipule d’énormes variables par rapport à l’espace RAM, ce qui est aujourd’hui souvent le cas.

Mais je me trompe peut-être, j’aimerais l’avis de SAM…

]]>
By: Sébastien http://sametmax.com/map-filter-et-reduce/#comment-191073 Tue, 28 Nov 2017 08:41:15 +0000 http://sametmax.com/?p=7791#comment-191073 juste un petit message pour ceux qui s’interrogent sur l’intérêt de map et filter…

Ces fonctions typiques de la programmation fonctionnelle sont par exemple très fortement utilisées dans des bibliothèques comme py-linq https://github.com/viralogic/py-enumerable ou asq https://github.com/sixty-north/asq qui permettent d’avoir une syntaxe à la LINQ (Language-Integrated Query) pour faire des requêtes (avec une API assez sympa… mais c’est une question de goût) sur des itérables.

]]>
By: Sam http://sametmax.com/map-filter-et-reduce/#comment-190301 Mon, 23 Oct 2017 12:25:24 +0000 http://sametmax.com/?p=7791#comment-190301 Google “python thread pool” ou “python multiprocessing pool”. Les pools ont des méthodes map() qui distribuent le travail à des workers.

]]>
By: Xuan http://sametmax.com/map-filter-et-reduce/#comment-190228 Fri, 20 Oct 2017 08:50:35 +0000 http://sametmax.com/?p=7791#comment-190228 Salut !

Est-il possible d’utiliser map en mode “thread” vu que généralement, il ne fait pas d’effet de bord (ne modifie pas de valeurs) ?

Exemple:

from time import sleep

import super_map_thread

def long_calcul(x):

sleep(5)

return x + 1

liste = [i for i in range(20)]

map(long_calcul, liste) # très rapide, mais retourne un object map

list(map(long_calcul, liste)) # -> 5 sec * 20 = 100 sec

list(super_map_thread(long_calcul, liste)) # -> 5 sec (et quelques) en tout

Je sais qu’on peut le faire avec des threads. Je me demande si il y a pas un module qui fait ça ? Ou alors l’utilisation n’est pas assez important (ou tout simplement que ce n’est pas fait pour ?) pour que quelqu’un ait crée un module ?

]]>
By: Sam http://sametmax.com/map-filter-et-reduce/#comment-188321 Wed, 19 Jul 2017 19:17:15 +0000 http://sametmax.com/?p=7791#comment-188321 C’est ce que font les listes en intension, mais avec une syntaxe native;

]]>
By: Kirire http://sametmax.com/map-filter-et-reduce/#comment-188297 Tue, 18 Jul 2017 21:27:19 +0000 http://sametmax.com/?p=7791#comment-188297 Alors je me trompe peut-être… mais un intérêt (et non des moindres) de map n’est-il pas de limiter les effets de bord ? Et ainsi d’avoir un code plus performant ?

Cela permet de faire des pipelines d’opération et d’affecter une seule fois une variable non ? Un exemple bête :

toto = un dataframe

titi = toto[‘une colonne’].map(fonction1)\

.map(fonction2)\

.map(fonction3)\

.map(fonction4), etc.

C’est beaucoup moins poussé que l’API Stream de Java8 (don je suis jaloux et qui manque sous Python ^^). Mais je trouve ça claire comme écriture… non ?

Ce ne serait pas le map, filter et reduce du builtin qui sont un peu vieillotte ? Python n’aurait-il pas à y gagner de s’inspirer de l’API Stream de Java8 ? (je suis pas un pro programmeur, ce sont de vrais questions)

]]>
By: Sam http://sametmax.com/map-filter-et-reduce/#comment-182611 Thu, 10 Nov 2016 12:28:32 +0000 http://sametmax.com/?p=7791#comment-182611 Les comprehensions sont de la syntaxe, donc le code derrière map directement sur des structures C. map et filter sont des fonctions, elles prennent en paramètres une autre fonction, qui à chaque appel prend un paramètre à nouveau. Cela fait pas mal de référence python à résoudre à chaque tour de boucle, et c’est ce qui ralenti le process.

]]>