Je pensais que je consoliderais les réponses et montrerais quelques timeit
résultats.
Python 2 est plutôt mauvais à cela, mais map
est un peu plus rapide que la compréhension.
Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:42:59) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> import timeit
>>> setup = """import random
random.seed(10)
l = [str(random.randint(0, 99)) for i in range(100)]"""
>>> timeit.timeit('[int(v) for v in l]', setup)
116.25092001434314
>>> timeit.timeit('map(int, l)', setup)
106.66044823117454
Python 3 est plus de 4x plus rapide en lui-même, mais la conversion de l' map
objet générateur en liste est toujours plus rapide que la compréhension, et la création de la liste en décompressant le map
générateur (merci Artem!) Est encore légèrement plus rapide.
Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 17:54:52) [MSC v.1900 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> import timeit
>>> setup = """import random
random.seed(10)
l = [str(random.randint(0, 99)) for i in range(100)]"""
>>> timeit.timeit('[int(v) for v in l]', setup)
25.133059591551955
>>> timeit.timeit('list(map(int, l))', setup)
19.705547827217515
>>> timeit.timeit('[*map(int, l)]', setup)
19.45838406513076
Remarque: Dans Python 3, 4 éléments semblent être le point de croisement (3 en Python 2) où la compréhension est légèrement plus rapide, bien que le déballage du générateur soit toujours plus rapide que pour les listes avec plus d'un élément.