Esta es una pregunta de consejos para jugar golf en python .
En varios campos de golf que he hecho en Python, se asigna un valor fijo a una de las dos variables elegidas por un booleano. La variable elegida se sobrescribe por el valor dado, y la otra no se modifica.
17 caracteres:
if b:y=z
else:x=z
Asignar un valor condicional es fácil , pero asignarlo a una variable condicional parece torpe. Me pregunto si hay un camino más corto que me falta.
Esto sería fácil si x,y
fuera una lista L
, pero suponga que el contexto requiere referirse a las variables lo suficiente como para escribir L[0]
y L[1]
es prohibitivo. La conversión lleva demasiado tiempo:
20 caracteres:
L=[x,y];L[b]=z;x,y=L
La forma más rápida que conozco es con un Python 2 exec
, lo cual es extraño:
16 caracteres, Python 2:
exec"xy"[b]+"=z"
La elección de tuplas parece ser más larga:
18, 19, 18, 18 caracteres:
x,y=b*(x,z)or(z,y)
x,y=[z,x,y,z][b::2]
y,x=[y,z,x][b:b+2]
y,x,*_=[y,z,x][b:] # Python 3
¿Hay algún método más corto u optimización de ahorro de caracteres? Puede suponer que b
es 0
o 1
, no solo Falsey o Truthy, y también hacer suposiciones sobre los tipos y valores de datos si es útil.
x,y=C(x,y,z,b)
(14 caracteres) e insertar cualquiera de estas implementaciones en el cuerpo deC
.