C'est une question de conseils pour jouer au golf en python .
Dans plusieurs golfs que j'ai effectués en Python, une valeur fixe est affectée à l'une des deux variables choisies par un booléen. La variable choisie est remplacée par la valeur donnée, et l'autre est inchangée.
17 caractères:
if b:y=z
else:x=z
L'attribution d'une valeur conditionnelle est facile , mais l'attribution à une variable conditionnelle semble maladroite. Je me demande s'il y a un moyen plus court de me manquer.
Ce serait facile s'il x,y
s'agissait plutôt d'une liste L
, mais supposons que le contexte nécessite de se référer suffisamment aux variables pour écrire L[0]
et L[1]
est prohibitif. La conversion prend trop de temps:
20 caractères:
L=[x,y];L[b]=z;x,y=L
Le moyen le plus rapide que je connaisse est avec un Python 2 exec
, ce qui est bizarre:
16 caractères, Python 2:
exec"xy"[b]+"=z"
Le choix des tuples semble être plus long:
18, 19, 18, 18 caractères:
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
Existe-t-il une méthode plus courte ou une optimisation pour économiser les caractères? Vous pouvez supposer que b
c'est 0
ou 1
pas seulement Falsey ou Truthy, et aussi faire des hypothèses sur les types de données et les valeurs si cela vous aide.
x,y=C(x,y,z,b)
(14 caractères) et pousser n'importe laquelle de ces implémentations dans le corps deC
.