Code Golf en Python se refiere a intentar resolver un problema utilizando la menor cantidad de caracteres posible. Al igual que en Golf, la puntuación más baja gana, la menor cantidad de caracteres «gana».
Python es un lenguaje fantástico para el golf de código debido a la compatibilidad con versiones anteriores, peculiaridades, es un lenguaje de alto nivel y toda la coerción. Entonces, aquí veremos algunas técnicas de golf de código en lenguaje Python.
Usando bucles
Contraer dos bucles numéricos: suponga que está iterando sobre una array de m filas y n columnas . En lugar de dos bucles for anidados, uno para la fila y otro para las columnas, suele ser más corto usar un solo bucle para iterar sobre la array m*n.
Código original:
m = n = 3 for i in range(m): for j in range(n): print(i, j)
Código de golf:
m = n = 3 for i in range(m*n): print(i//n, i%n)
Esta técnica no se limita a solo dos bucles anidados, incluso podemos escribir el mismo bucle para 3 o más bucles anidados
m, n, o = 2, 3, 4 for k in range(m*n*o): print(k//n//o, k%(n*o), k%o)
Usando operadores
- Suma o Resta por 1: Para el entero n puedes escribir
- -~n es equivalente a n+1
- ~-n es equivalente a n-1
Esto funciona porque el bit flip ~x es igual a -x-1 . Esto usa la misma cantidad de caracteres, pero puede cortar espacios o paréntesis indirectamente para la precedencia del operador.
- Membresía en Set: Escribimos set en Python como S = {1, 2, 3, 4, 5}. Para verificar si un elemento e existe en el Conjunto S o no, podemos verificar la condición como {e}&S
Código original:
S = {1, 2, 3, 4, 5, 6, 7} if 5 in S: print("Present") else: print("Absent")
Código de golf:
S = {1, 2, 3, 4, 5, 6, 7} if {5}&S: print("Present") else: print("Absent")
- Hermano del operador AND: cuando tenemos dos valores booleanos o enteros, a y b , si queremos averiguar si tanto a como b son verdaderos, use * en lugar de y .
Código original:
if a and b: print("geeks") else: print("geeksforgeeks")
Código de golf:
if a*b: print("geeks") else: print("geeksforgeeks")
- Hermano del operador OR: cuando tenemos dos valores booleanos o enteros, a y b , si queremos averiguar si alguno de a y b es verdadero o ambos, use | en lugar de o .
Código original:
if a or b: print("geeks") else: print("geeksforgeeks")
Código de golf:
if a|b: print("geeks") else: print("geeksforgeeks")
- Use += en lugar de agregar: en lugar de usar agregar para agregar un elemento a una lista existente, podemos usar el operador +=.
Código original:
A.append(B)
Código de golf:
A+=B,
Nota: B, aquí crea una tupla de un elemento que se puede usar para extender A como [B] en A+=[B].
- Use += en lugar de extender: en lugar de usar extender para fusionar una lista con otra al final, podemos usar el operador +=.
Código original:
A.extend(B)
Código de golf:
A+=B
- Operadores Mágicos de Comparación: Nos enfrentamos a muchas situaciones en las que tenemos que comparar una misma variable con diferentes valores, y generalmente las defendemos mediante diferentes comparaciones y combinándolas con el operador AND . Pero Python nos permite poner todos los operadores de comparación en una sola línea sin usar el operador AND .
Código original:
if a>1 and a<10: print(a)
Código de golf:
if 1<a<10: print(a)
Nota: Podemos usar esta técnica para múltiples variables también al mismo tiempo.
Código original:
if a > 10 and b > 10 and 30 > a and 50 > b: print(a)
Código de golf:
if 30 > a > 10 < b < 50: print(a)
Uso de funciones
- Hermano de la función de piso: supongamos que queremos encontrar el valor de piso de un número real, generalmente importamos la función de piso de matemáticas y luego la aplicamos en el número. Pero podemos simplemente aplicar la división de piso con 1, lo que nos dará un resultado fructífero.
Código original:
from math import floor n = 3/2 print(floor(n))
Código de golf:
n = 3/2 print(n//1)
- Hermano de la función Ceil: supongamos que queremos encontrar el valor ceil de un número real, generalmente importamos la función ceil de las matemáticas y luego la aplicamos al número. Pero podemos hacer esta operación de una manera más hermosa multiplicando primero con -1 y luego aplicando la división de piso con 1 y nuevamente multiplicando con -1.
Código original:
from math import ceil n = 3/2 print(ceil(n))
Código de golf:
n = 3/2 print(-(-n//1))
- Funciones de Lambda : la definición de Lambda no incluye una declaración de «retorno», siempre contiene una expresión que se devuelve. También podemos poner una definición lambda en cualquier lugar donde se espera una función, y no tenemos que asignarla a ninguna variable. Esta es la simplicidad de las funciones lambda.
Código original:
def c(a): if a < 3: return a-5 else: return a+5
Código de golf:
c=lambda a:a<3and a-5or a+5
- Para obtener la string del alfabeto completo: podemos usar la función de mapa de python para obtener la string del conjunto alfabético completo.
Codigo original:
string = 'abcdefghijklmnopqrstuvwxyz' or string = [chr(i+97)for i in range(26)]
Código de golf:
string = map(chr,range(97,123))
Usando la indexación
- Técnica de indexación para condiciones: cuando tenemos una determinada condición que dará la respuesta en forma de pequeños enteros, podemos usar eso en el índice de enteros en la lista o tupla para obtener nuestra respuesta final.
Código original:
if a<b:return a else:return b
Código de golf:
return (b, a)[a<b]
- Invertir la secuencia: podemos invertir cualquier secuencia de la lista usando la carita sonriente alienígena buena.
Código original:
string = 'geeksforgeeks' for i in range(len(string)-1,-1,-1): print(string[i])
Código de golf:
string = 'geeksforgeeks' for i in string[::-1]: print(i)
- Use ~ para indexar desde la parte posterior de una lista: si L es una lista, use L[~i] para obtener el i-ésimo elemento de la parte posterior. Este es el i-ésimo elemento del reverso de L. El complemento de bit ~i es igual a -i-1, y así corrige el error de L[-i].
Código original:
string = 'geeksforgeeks' for i in range(len(string)-1,-1,-1): print(string[i])
Código de golf:
for i in range(len(string)): print(string[~i])
- Imprimir los elementos de la lista: podemos imprimir los elementos de una lista usando el operador * con el nombre de la lista en lugar de recorrer la lista.
Código original:
A = [1,2,3,4,5,6,7] for i in A: print(i,end = ' ')
Código de golf:
A = [1,2,3,4,5,6,7] print(*A)
Usando la asignación
- Asignar los mismos valores a múltiples variables: Podemos asignar el mismo valor a múltiples variables ya sea en una sola línea o en varias líneas.
Código original:
# multiple lines a = 0 b = 0 c = 0 # single line a,b,c = 0,0,0
Código de golf:
a = b = c = 0
- Asignación de caracteres iguales o diferentes a la variable: podemos asignar el mismo o diferentes caracteres a múltiples variables, ya sea en una sola línea o en varias líneas.
Código original:
# multiple lines a = 'p' b = 'q' c = 'r' # single line a,b,c = 'p','q','r'
Código de golf:
a,b,c = 'pqr'
Usando la conversión
- Conversión de iterables en la lista: imagine que tiene un iterable ordenado como una tupla o una string, pero desea convertirlo en una lista, por lo que puede hacerlo con el operador * .
Código original:
a = (2,3,5,7,11) x = list(a) a = 'geeksforgeek' x = list(a)
Código de golf:
a = (2,3,5,7,11) *x, = a a = 'geeksforgeeks' *x, = a
- Conversión de iterables en el conjunto: imagine que tiene cualquier iterable como una lista, una tupla o una string, pero desea convertirlo en un conjunto, por lo que puede hacerlo con el operador * .
Código original:
a = (2,3,5,7,11) x = set(a) a = [2,3,5,7,11] x = set(a) a = 'geeksforgeeks' x = set(a)
Código de golf:
a = (2,3,5,7,11) x = {*a} a = [2,3,5,7,11] x = {*a} a = 'geeksforgeeks' x = {*a}
- Conversión de iterables en tupla: imagine que tiene cualquier iterable como una lista, un conjunto o una string, pero desea convertirlo en una tupla, por lo que puede hacerlo con el operador * .
Código original:
a = (2,3,5,7,11) x = tuple(a) a = [2,3,5,7,11] x = tuple(a) a = 'geeksforgeeks' x = tuple(a)
Código de golf:
a = (2,3,5,7,11) x = (*a,) a = [2,3,5,7,11] x = (*a,) a = 'geeksforgeeks' x = (*a,)
Durante la unión de diferentes iterables
- Unirse a múltiples listas: Podemos unir múltiples listas usando el operador + , pero para el golf de código podemos hacer lo mismo usando el operador * .
Código original:
T = [2,3,4,5,6,7,8,9] new_T = [1]+T+[10]
Código de golf:
T = [2,3,4,5,6,7,8,9] new_T = [1,*T,10]
- Unirse a múltiples listas: Podemos unir múltiples listas usando el operador + , pero para el golf de código podemos hacer lo mismo usando el operador * .
Código original:
T = (2,3,4,5,6,7,8,9) new_T = (1,)+T+(10,)
Código de golf:
T = (2,3,4,5,6,7,8,9) new_T = (1,*T,10)
Publicación traducida automáticamente
Artículo escrito por chaudhary_19 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA