Aquí hay 11 consejos y trucos que te ayudarán a escribir mejor código Python y convertirte en un mejor programador: 1. Iterar con enumerar en lugar o range(len(x)) En Python, generalmente usamos un bucle para iterar sobre un objeto iterable. Un bucle en Python utiliza una iteración basada en la colección, es decir, Python asigna el siguiente elemento de un iterable a la variable de bucle en cada iteración. El caso de uso habitual de un bucle es el siguiente: for for for values = ["a", "b", "c"] for value in values: print(value) # a # b # c Ahora, si además del valor, también desea imprimir el índice, puede hacerlo así: index = 0 for value in values: print(index, value) index += 1 # 0 a # 1 b # 2 c u otra forma común de hacer esto es usando : range(len(x)) for index in range(len(values)): value = values[index] print(index, value) # 0 a # 1 b # 2 c Sin embargo, hay una forma más fácil y pitónica de iterar sobre objetos iterables usando . Se usa en un bucle casi de la misma manera que se usa de la manera habitual, pero en lugar de colocar el objeto iterable directamente después el bucle , o usarlo como , lo coloca dentro los paréntesis de como se muestra a continuación: enumerate() for in for range(len(values)) enumerate() for count, value in enumerate(values): print(count, value) # 0 a # 1 b # 2 c También podemos definir un argumento de para como se muestra a continuación: start enumerate() for count, value in enumerate(values, start=1): print(count, value) # 1 a # 2 b # 3 c La función devuelve dos variables: enumerate() el recuento de la iteración actual el valor del elemento en la iteración actual Al igual que las variables de bucle en un bucle , las variables de bucle pueden tener cualquier nombre, por ejemplo, podemos llamarlas y y seguirán funcionando. es más eficiente que un ciclo , ya que le ahorra la molestia de recordar acceder al valor dentro del ciclo y usarlo correctamente y luego también recordar avanzar el valor de la variable de ciclo, Python lo maneja automáticamente. . for index value enumerate() for 2. Usa la comprensión de listas en lugar de los bucles for sin formato La comprensión de listas es una forma más fácil y elegante de definir y crear listas basadas en las listas existentes. Son solo una línea de código que consta de corchetes que contienen la expresión que se ejecuta repetidamente en cada iteración. Por lo tanto, son más eficientes en cuanto al tiempo y el espacio que los bucles y transforman declaraciones iterativas en una sola línea de código. La sintaxis habitual de una lista por comprensión se ve así: newList = [ expression(element) for element in oldList if condition ] Aquí hay un ejemplo de comprensión de lista en código: # Using list comprehension to iterate through loop List = [character for character in 'HackerNoon'] # Displaying list print(List) # Output # ['H', 'a', 'c', 'k', 'e', 'r', 'N', 'o', 'o', 'n'] 3. Ordenar iterables complejos con sorted() La función Python ordena los elementos de un objeto iterable en un orden específico (ascendente o descendente) y los devuelve como una lista ordenada. Se puede usar para ordenar una secuencia (cadena, tupla, lista) o colección (conjunto, diccionario, conjunto congelado) o cualquier otro iterador. sorted() La sintaxis de la función es la siguiente: sorted() sorted(iterable, key=None, reverse=False) La función toma como máximo tres parámetros: sorted() iterable: podría ser cualquier iterador clave: es un argumento opcional que sirve como clave para la comparación de clasificación. reverse: también es un argumento opcional que se usa para especificar una lista ordenada invertida como salida 4. Almacene valores únicos con conjuntos Un conjunto de Python almacena una sola copia de los valores duplicados en él. Por lo tanto, se puede usar para verificar valores únicos en una lista. Por ejemplo: list_inp = [100, 75, 100, 20, 75, 12, 75, 25] set_res = set(list_inp) print("The unique elements of the input list using set():\n") list_res = (list(set_res)) for item in list_res: print(item) Entonces, la salida del programa anterior se vería así: The unique elements of the input list using set(): 25 75 100 20 12 5. Ahorre memoria con Generadores La función básica del generador es evaluar los elementos bajo demanda. Es muy similar a la sintaxis para la comprensión de listas, donde en lugar de corchetes, usamos paréntesis. Consideremos un ejemplo donde queremos imprimir el cuadrado de todos los números pares en una lista: myList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] print("The given list is:", myList) mygen = (element ** 2 for element in myList if element % 2 == 0) print("Elements obtained from the generator are:") for ele in mygen: print(ele) La salida del código anterior se vería así: The given list is: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] Elements obtained from the generator are: 4 16 36 64 100 Habiendo dicho que su sintaxis es bastante similar a la comprensión de listas, debe preguntarse en qué se diferencia de la comprensión de listas o conjuntos. A diferencia de la comprensión de listas o conjuntos, la comprensión del generador no inicializa ningún objeto. Como resultado, puede utilizar la comprensión del generador en lugar de la comprensión de listas o conjuntos para reducir los requisitos de memoria del programa. 6. Defina valores predeterminados en Diccionarios con y .get() .setdefault() El método permite configurar si la clave aún no está en dict. .setdefault() dict[key]=default La sintaxis de es similar a la siguiente: .setdefault() dict.setdefault(key, default=None) Aquí hay un fragmento de código de ejemplo para entender cómo usar : .setdefault() a_dictionary = {"a": 1, "b": 2, "d": 4} a_dictionary.setdefault("c", 3) print(a_dictionary) La salida del código anterior se vería así: {'a': 1, 'b': 2, 'd': 4, 'c': 3} También se puede lograr lo mismo utilizando el método al pasar un valor predeterminado para la clave, como puede ver a continuación: .get() a_dictionary = {"a": 1, "b": 2, "d": 4} print(a_dictionary.get("c", 3)) print(a_dictionary) La salida del código anterior se vería así: 3 {'a': 1, 'b': 2, 'd': 4} 7. Contar objetos hash con collections.Counter El módulo Colecciones admite tipos de datos de contenedor de alto rendimiento (además de la lista de tipos integrados, dict y tuple) y contiene una variedad de estructuras de datos útiles para almacenar información en la memoria. Un contador es un contenedor que realiza un seguimiento de la cantidad de veces que se agregan valores iguales. Puede usarse para implementar los mismos algoritmos que otros lenguajes emplean para implementar estructuras de datos de bolsa o conjunto múltiple. Importar colecciones hace que el material de las colecciones esté disponible como: import collections Como solo vamos a usar el Contador, simplemente podemos hacer esto: from collections import Counter Se puede utilizar de la siguiente manera: import collections c = collections.Counter('abcdaab') for letter in 'abcde': print '%s : %d' % (letter, c[letter]) La salida del código anterior se vería así: a : 3 b : 2 c : 1 d : 1 e : 0 8. Cadenas de formato con f-Strings (Python 3.6+) f-strings, también llamados "literales de cadena con formato", son una forma nueva y más pitónica de formatear cadenas, compatible con Python 3.6+. Son una forma más rápida, más legible, más concisa y menos propensa a errores de formatear cadenas en Python. Como dice el nombre "f-string", son cadenas literales que tienen una f al principio y llaves que contienen expresiones que se reemplazarán con sus valores en el tiempo de ejecución y luego se formatearán usando el protocolo . __format__ f-strings se puede utilizar de la siguiente manera: name = "Eric" age = 74 print(f"Hello, {name}. You are {age}.") # 'Hello, Eric. You are 74.' 9. Concatenar cadenas con .join() En Python, podemos usar el método para concatenar una lista de cadenas en una sola cadena. La sintaxis habitual para este método se ve a continuación: .join() 'String to insert'.join([List of strings]) Se puede usar de varias maneras: si usa la cadena vacía , [Lista de cadenas] simplemente se concatena, y si usa una coma, se crea una cadena delimitada por comas. Cuando se usa el carácter de nueva línea , se agrega una nueva línea después de cada cadena. Vea el ejemplo a continuación: ““ \n l = ['aaa', 'bbb', 'ccc'] s = ''.join(l) print(s) # aaabbbccc s = ','.join(l) print(s) # aaa,bbb,ccc s = '-'.join(l) print(s) # aaa-bbb-ccc s = '\n'.join(l) print(s) # aaa # bbb # ccc 10. Combinar diccionarios con (Python 3.5+) {**d1, **d2} La forma más sencilla de fusionar diccionarios es utilizando el operador de desempaquetado ( ). La sintaxis de este método se ve así: ** {**dict1, **dict2, **dict3} Aquí hay un ejemplo para entender mejor este método: d1 = {'k1': 1, 'k2': 2} d2 = {'k3': 3, 'k4': 4} print({**d1, **d2}) # {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4} 11. Simplifique las declaraciones if con if x in list Supongamos que tenemos una lista con los colores primarios rojo, verde y azul. Y en algún lugar de nuestro código, tenemos una nueva variable con un color, entonces c = rojo. Luego veremos si este es uno de nuestros colores primarios. Por supuesto, podemos verificar esto con cada elemento de nuestra lista de la siguiente manera: colors = ["red", "green", "blue"] c = "red" # cumbersome and error-prone if c == "red" or c == "green" or c == "blue": print("is main color") Sin embargo, esto puede llevar bastante tiempo y podemos cometer errores fácilmente, como si tuviéramos un error tipográfico aquí para el rojo. Es más simple y mucho más preferible usar la expresión si x en la lista: colors = ["red", "green", "blue"] c = "red" # better: if c in colors: print("is main color") Conclusión Python es un lenguaje de programación ampliamente utilizado y, al utilizar los consejos y trucos anteriores, puede convertirse en un mejor programador de Python. Espero que este artículo haya sido útil. ¡Sigue leyendo!