En 2017, cuando ACM permitió el soporte de Python para su prestigiosa competencia, ACM ICPC, una comunidad completamente nueva se interesó en el deporte de la programación competitiva. Esto significó que más personas volvieran a lo básico, aprendiendo algoritmos que son los componentes básicos de los paquetes complejos que utilizan para construir sus paquetes de alto nivel.
Desafortunadamente, no existe mucha información sobre cómo usar estructuras de datos de manera efectiva e incluso las reglas de alcance de python que llevan a las personas a creer que python es inferior a la programación competitiva.
Hoy les mostraré cómo python a veces es incluso más poderoso que C++ o Java gracias a sus increíbles bibliotecas y lo simple que en realidad puede ser.
Permítanme demostrar con un ejemplo simple, mire los siguientes fragmentos de código:
alphabets = ['a', 'b', 'c'] for item in alphabets: len(item)
alphabets = ['a', 'b', 'c'] fn = len for item in alphabets: fn(item)
Podría pensar que asigné un alias a la función ‘len’ y que podría no marcar la diferencia.
Así que escribí una función de prueba de rendimiento de la siguiente manera.
import datetime alphabets = [str(x)for x in range(10000000)] a = datetime.datetime.now() # store initial time for item in alphabets: len(item) b = datetime.datetime.now() # store final time print (b-a).total_seconds() # results a = datetime.datetime.now() fn = len # function stored locally for item in alphabets: fn(item) b = datetime.datetime.now() print (b-a).total_seconds()
Te animo a que lo pruebes en tus sistemas.
Aquí está el resultado en el mío al ejecutar el script performance.py.
¡Casi la mitad!
Bien, ahora tratemos de analizar por qué sucedió esto. ¿Razón? La búsqueda de una función es una operación costosa.
En el segundo fragmento, almacené la función directamente en el alcance de la función, por lo que no importa cuántas veces la llame, cada vez que el tiempo de ejecución sabe exactamente dónde tiene que buscar los resultados.
Itertools
Si ha estado en codeforces, ya sabe que muchos de los desafíos de programación implican retroceder. Así que hoy les contaré sobre una biblioteca para generar todas las permutaciones y combinaciones utilizando un paquete de biblioteca incorporado que es extremadamente rápido. Itertools. Si está buscando resolver desafíos algorítmicos con python, itertools es una biblioteca que definitivamente debe explorar.
Para generar todas las permutaciones –
from itertools import permutations perm = permutations([1, 2, 3], 2) for i in list(perm): print i # Answer->(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)
Las funciones de combinaciones() se comportan de manera similar. Animo a los lectores a probarlo por su cuenta.
Python es un lenguaje lento solo si su código no está aprovechando su poder con éxito. No sienta que está en desventaja si es un codificador de Python, ¡en realidad es muy ordenado y muy rápido!