Pensé en consolidar las respuestas y mostrar algunos timeit
resultados.
Python 2 apesta bastante mal en esto, pero map
es un poco más rápido que la comprensión.
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 es 4 veces más rápido por sí mismo, pero convertir el map
objeto generador en una lista es aún más rápido que la comprensión, y crear la lista desempacando el map
generador (¡gracias Artem!) Es aún más rápido.
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
Nota: En Python 3, 4 elementos parecen ser el punto de cruce (3 en Python 2) donde la comprensión es un poco más rápida, aunque desempacar el generador es aún más rápido que cualquiera de las listas con más de 1 elemento.