Questa è una domanda di consigli per giocare a golf in Python .
In più golf che ho fatto in Python, un valore fisso è assegnato a una delle due variabili scelte da un booleano. La variabile scelta viene sovrascritta dal valore dato e l'altra rimane invariata.
17 caratteri:
if b:y=z
else:x=z
Assegnare un valore condizionale è facile , ma l'assegnazione a una variabile condizionale sembra voluminosa. Mi chiedo se mi manca un modo più breve.
Questo sarebbe facile se x,y
invece fosse un elenco L
, ma supponiamo che il contesto richieda di fare riferimento alle variabili abbastanza che scrivere L[0]
ed L[1]
è proibitivo. La conversione richiede troppo tempo:
20 caratteri:
L=[x,y];L[b]=z;x,y=L
Il modo più veloce che conosco è con un Python 2 exec
, che è bizzarro:
16 caratteri, Python 2:
exec"xy"[b]+"=z"
La scelta della tupla sembra essere più lunga:
18, 19, 18, 18 caratteri:
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
Esiste un metodo più breve o ottimizzazione per il salvataggio dei caratteri? Puoi presumere che b
sia 0
o 1
non solo Falsey o Truthy, e anche fare ipotesi sui tipi di dati e sui valori se aiuta.
x,y=C(x,y,z,b)
(14 caratteri) e inserire una di queste implementazioni nel corpo diC
.