Aprovechamiento de Map() y Comprensiones de Listas
Siempre que sea posible, es preferible utilizar funciones integradas, métodos o funciones de biblioteca en lugar de crear algoritmos desde cero. Las funciones integradas y de biblioteca suelen estar optimizadas para el rendimiento, se ejecutan de manera más eficiente y están diseñadas para gestionar una amplia variedad de casos límite de forma eficaz.
Comencemos con herramientas potentes como la función map() y las comprensiones de listas, que pueden acelerar significativamente tu código. Dado que las comprensiones de listas están más optimizadas para el rendimiento y map() está implementada en C, generalmente se ejecutan más rápido que los bucles escritos manualmente.
Comprensiones de listas
Las comprensiones de listas ofrecen una forma más concisa y, a menudo, más rápida de crear listas en comparación con los bucles for tradicionales. Además, pueden hacer que tu código sea más fácil de leer y entender.
Comparemos el rendimiento de un bucle for y una comprensión de listas generando una lista donde cada número del 1 al 10000000 se multiplica por 2:
123456789101112131415161718192021import os os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator numbers = list(range(1, 10000001)) @timeit_decorator(number=3) def list_comprehension(): return [x * 2 for x in numbers] @timeit_decorator(number=3) def for_loop(): result = [] for x in numbers: result.append(x * 2) return result list_1 = list_comprehension() list_2 = for_loop() print(list_1 == list_2)
Uso de map()
La función map aplica una función especificada a cada elemento de un iterable (por ejemplo, una lista).
Además de ser más concisa que escribir bucles, suele ejecutarse más rápido debido a las optimizaciones a nivel de C en su implementación, lo que reduce la sobrecarga de llamadas repetidas a funciones.
Aunque map puede ofrecer ciertos beneficios de rendimiento, especialmente al trabajar con funciones incorporadas, la diferencia de velocidad en comparación con las comprensiones de listas suele ser insignificante. Ambas están altamente optimizadas y, para operaciones simples, la ventaja de rendimiento de map es apenas perceptible. En la práctica, la elección entre ambas debe basarse más en la legibilidad y en casos de uso específicos, como la eficiencia de memoria con map.
Comparemos el rendimiento de map, los bucles for y las comprensiones de listas al formatear 1000000 nombres de clientes a mayúsculas iniciales (por ejemplo, 'john doe' -> 'John Doe'):
1234567891011121314151617181920212223242526import os os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator customer_names = ['john doe', 'jane smith', 'alex johnson', 'ivan smith'] * 250000 @timeit_decorator(number=10) def map_function(): return list(map(str.title, customer_names)) @timeit_decorator(number=10) def list_comprehension(): return [name.title() for name in customer_names] @timeit_decorator(number=10) def for_loop(): result = [] for name in customer_names: result.append(name.title()) return result formatted_with_map = map_function() formatted_with_comprehension = list_comprehension() formatted_with_for_loop = for_loop() print(formatted_with_map == formatted_with_comprehension == formatted_with_for_loop)
Como era de esperarse, el bucle for es el enfoque más lento de los tres. En este ejemplo, map resultó ser más rápido que la comprensión de listas, aunque en la práctica, el rendimiento puede variar según el caso de uso específico. En ocasiones, las comprensiones de listas pueden incluso superar a map, especialmente para expresiones más simples.
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
Genial!
Completion tasa mejorada a 7.69
Aprovechamiento de Map() y Comprensiones de Listas
Desliza para mostrar el menú
Siempre que sea posible, es preferible utilizar funciones integradas, métodos o funciones de biblioteca en lugar de crear algoritmos desde cero. Las funciones integradas y de biblioteca suelen estar optimizadas para el rendimiento, se ejecutan de manera más eficiente y están diseñadas para gestionar una amplia variedad de casos límite de forma eficaz.
Comencemos con herramientas potentes como la función map() y las comprensiones de listas, que pueden acelerar significativamente tu código. Dado que las comprensiones de listas están más optimizadas para el rendimiento y map() está implementada en C, generalmente se ejecutan más rápido que los bucles escritos manualmente.
Comprensiones de listas
Las comprensiones de listas ofrecen una forma más concisa y, a menudo, más rápida de crear listas en comparación con los bucles for tradicionales. Además, pueden hacer que tu código sea más fácil de leer y entender.
Comparemos el rendimiento de un bucle for y una comprensión de listas generando una lista donde cada número del 1 al 10000000 se multiplica por 2:
123456789101112131415161718192021import os os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator numbers = list(range(1, 10000001)) @timeit_decorator(number=3) def list_comprehension(): return [x * 2 for x in numbers] @timeit_decorator(number=3) def for_loop(): result = [] for x in numbers: result.append(x * 2) return result list_1 = list_comprehension() list_2 = for_loop() print(list_1 == list_2)
Uso de map()
La función map aplica una función especificada a cada elemento de un iterable (por ejemplo, una lista).
Además de ser más concisa que escribir bucles, suele ejecutarse más rápido debido a las optimizaciones a nivel de C en su implementación, lo que reduce la sobrecarga de llamadas repetidas a funciones.
Aunque map puede ofrecer ciertos beneficios de rendimiento, especialmente al trabajar con funciones incorporadas, la diferencia de velocidad en comparación con las comprensiones de listas suele ser insignificante. Ambas están altamente optimizadas y, para operaciones simples, la ventaja de rendimiento de map es apenas perceptible. En la práctica, la elección entre ambas debe basarse más en la legibilidad y en casos de uso específicos, como la eficiencia de memoria con map.
Comparemos el rendimiento de map, los bucles for y las comprensiones de listas al formatear 1000000 nombres de clientes a mayúsculas iniciales (por ejemplo, 'john doe' -> 'John Doe'):
1234567891011121314151617181920212223242526import os os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator customer_names = ['john doe', 'jane smith', 'alex johnson', 'ivan smith'] * 250000 @timeit_decorator(number=10) def map_function(): return list(map(str.title, customer_names)) @timeit_decorator(number=10) def list_comprehension(): return [name.title() for name in customer_names] @timeit_decorator(number=10) def for_loop(): result = [] for name in customer_names: result.append(name.title()) return result formatted_with_map = map_function() formatted_with_comprehension = list_comprehension() formatted_with_for_loop = for_loop() print(formatted_with_map == formatted_with_comprehension == formatted_with_for_loop)
Como era de esperarse, el bucle for es el enfoque más lento de los tres. En este ejemplo, map resultó ser más rápido que la comprensión de listas, aunque en la práctica, el rendimiento puede variar según el caso de uso específico. En ocasiones, las comprensiones de listas pueden incluso superar a map, especialmente para expresiones más simples.
¡Gracias por tus comentarios!