💡7 trucos prácticos de Python
No hay duda de que Python es un lenguaje que ha experimentado un crecimiento significativo durante la última década. Un lenguaje que demuestra constantemente su poder.
Python tiene una gran cantidad de posibilidades, y si acaba de comenzar a trabajar con él, puede ser difícil comprenderlo todo de inmediato.
Aunque, incluso si es un programador que está cambiando a Python desde otro lenguaje, o si eres un científico que ha trabajado antes con MATLAB, programar en Python utilizando abstracciones de alto nivel será una experiencia completamente nueva.
La mayoría de los ejemplos solo funcionarán en la tercera versión de Python.
1. Ordenar el diccionario por valores
La práctica de utilizar diccionarios como tablas para almacenar datos está muy extendida. Ordenar los datos del diccionario por valores de clave en lugar de las claves en sí es a menudo confuso. La tarea se resuelve de manera bastante simple mediante el uso de un argumento key
para especificar una función que se llamará en cada elemento antes de la comparación:
>>> d = {'manzanas': 40, 'naranjas': 80, 'platanos': 70} >>> sorted(d, key=d.get) ['manzanas', 'platanos', 'naranjas']
2. Encontrar los elementos de lista más frecuentes
Si necesita encontrar varios de los valores que se repiten con más frecuencia, es mejor usar el contador Counter
de la biblioteca collections
:
>>> from collections import Counter >>> a = ['a', 'b', 'c', 'a', 'b', 'c', 'b', 'b', 'd', 'e', 'a'] >>> cnt = Counter(a) >>> cnt.most_common(3) [('b', 4), ('a', 3), ('c', 2)]
El método Counter.most_common(x)
devuelve x
valores, en las que el primero es un elemento y el segundo es el número de veces que se ha repetido.
3. Combinar listas sin un bucle
¿Cómo resolverías el problema de combinar listas de diferentes longitudes sin pasar por el ciclo? Así es como puedes hacerlo usando una función estándar sum
, especificando una lista vacía como segundo argumento, a la que se agregan el resto de las sublistas:
>>> L = [[1, 2, 3], [4, 5], [6], [7, 8, 9]] >>> sum(L, []) [1, 2, 3, 4, 5, 6, 7, 8, 9]
Otra forma, aunque menos concisa, pero más eficiente, es usar un módulo itertools:
import itertools L = [[1, 2, 3], [4, 5], [6], [7, 8, 9]] >>>list(itertools.chain.from_iterable(L)) [1, 2, 3, 4, 5, 6, 7, 8, 9]
Por cierto, cuando se trabaja con secuencias, se encuentran muchas soluciones útiles en los módulos de biblioteca estándar de collections e itertools.
4. Eliminar duplicados de la lista manteniendo el orden.
Entre los trucos que se utilizan habitualmente en Python se encuentra el uso de un conjunto para eliminar elementos duplicados en una lista:
>>> elementos = [2, 2, 3, 3, 1] >>> list(set(items)) [1, 2, 3]
Pero los conjuntos son secuencias desordenadas.
A menudo es necesario preservar el orden de los elementos. Para hacer esto, puedes usar un tipo de datos collections.OrderedDict
que sea similar a un diccionario normal, pero el orden en que se le dieron las claves. Entonces, hagamos un diccionario ordenado, y luego solo tomemos sus claves:
from collections import OrderedDict elementos = [2, 2, 3, 3, 1] >>> d = OrderedDict.fromkeys(items) >>> list(d.keys()) [2, 3, 1]
5. Concatenación de cadenas
No es raro que un programador se ocupe de la concatenación de cadenas utilizando el signo de suma. Es más conveniente crear una cadena a partir de una lista de varias subcadenas usando el método de cadena join
:
>>> a = ["Python", "-", "es un gran lenguaj"] >>> "" .join(a) 'Python - es un gran lenguaje'
Aquí hay un ejemplo más complicado: convertir una lista de números en una cadena:
>>> numbers = [1, 2, 3, 4, 5] >>> ', '.join(map(str, numbers)) '1, 2, 3, 4, 5'
Recuerda que el método join
es más rápido que el bucle.
6. Función zip
La función zip
crea un iterador que combina los elementos de varias listas. Esto permite el recorrido paralelo de listas en bucles for
o, por ejemplo, la clasificación en paralelo.
A continuación, se muestra un ejemplo de cómo trabajar con una función zip
:
>>> list_a = [0, 1, 2] >>> list_b = ['zero', 'one', 'two'] >>> list_c = ['cero', 'uno', 'dos'] >>> list(zip(list_a, list_b, list_c)) [(0, 'zero', 'cero'), (1, 'one', 'uno'), (2, 'two', 'dos')] >>> for a, b, c in zip(list_a, list_b, list_c): ... print(f'{a} is {b} in English and {c} in Spanish.') ... 0 is zero in English and cero in Spanish. 1 is one in English and uno in Spanish. 2 is two in English and dos in Spanish.
Puede devolver los elementos combinados a su estado normal utilizando el operador *
.
>>> z = list(zip(list_a, list_b, list_c)) >>> a, b, c = zip(*z) >>> a (0, 1, 2) >>> b ('zero', 'one', 'two') >>> c ('cero', 'uno', 'dos')
7. La función "enumerate"
A primera vista, la función enumerate
puede parecer complicada, pero si la entiendes, resulta que puede ser útil en muchos casos. La función enumerate
permite crear un contador automático que se usa a menudo en ciclos for
.
En tales bucles, no es necesario crear e incrementar la variable de contador usando construcciones comocounter = 0
ycounter += 1
Las funciones zip
y enumerate
son dos de las herramientas más poderosas que se utilizan al construir bucles for
:
>>> upperCase = ['A', 'B', 'C', 'D', 'E', 'F'] >>> lowerCase = ['a', 'b', 'c', 'd', 'e', 'f'] >>> for count, (upper, lower) in enumerate(zip(upperCase, lowerCase), 1): ... print(f'{count}: {upper} and {lower}.') ... 1: A and a. 2: B and b. 3: C and c. 4: D and d. 5: E and e. 6: F and f.
En este caso, la variable count
se usa como contador automático.
Bono divertido al final
Has leído el artículo? Seguramente muchos de vosotros conocen el Zen de Python, producido por el intérprete en el comando import this
. Algunos otros huevos de Pascua están ocultos en la tercera versión de Python:
import antigravity import __hello__