Tarek le 26/10/2006 :

Le même script sous Python 2.5 :

tziade@dabox:~$ python test2.py
=== map vs. list-comprehension ===
map without list-comprehension:
707 pystones
map with list-comprehension:
634 pystones
=== filter vs. list-comprehension ===
filter without list-comprehension:
687 pystones
filter with list-comprehension:
634 pystones

JS le 26/10/2006 :

Bon, j'ai rien compris au map et list-comprehension, faudrait que je regarde ca de plus près...

Par contre, t'es sur #python-fr ???

sebsauvage le 01/12/2006 :

Hello !

Tu as oublié qu'avec de si petites données de test, l'overhead d'appel aux fonction devient non négligeable.

J'ai refait les tests avec de plus grands ensembles de données et je maintien ce que j'ai dit:
map et filter sont plus rapide que list comprehension (sauf quand on combine map et filter).

Voici le fichier de test:
sebsauvage.net/python/sny...

Et les résultats:
===== map_without_list_comprehension =====
105 function calls in 0.231 CPU seconds
===== map_with_list_comprehension =====
1000005 function calls in 6.941 CPU seconds

===== filter_without_list_comprehension =====
105 function calls in 0.074 CPU seconds
===== filter_with_list_comprehension =====
1000005 function calls in 6.889 CPU seconds

C'est sans appel: map et filter sont nettement plus rapides.
(Dans notre exemple: d'un facteur x30 pour map, et d'un facteur x93 pour filter)


...sauf quand on doit les combiner:
===== mapfilter_without_list_comprehension =====
2042605 function calls in 13.935 CPU seconds
===== mapfilter_with_list_comprehension =====
521205 function calls in 3.795 CPU seconds

Là la list comprehension est plus rapide.


Donc je ne me suis pas trompé, mais c'est à mitiger. :-)
Il vaut mieux profiler le code.

xfeeder le 29/06/2010 :

les list-comprehensions sont toujours plus rapides que map ou filter avec Python 2.4.