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,ys'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 bc'est 0ou 1pas 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.