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,yfuera 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 bes 0o 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.