Dies ist eine Tippfrage zum Golfen in Python .
Bei mehreren Golfspielen, die ich in Python durchgeführt habe, wird einer von zwei Variablen, die von einem Booleschen Wert ausgewählt wurden, ein fester Wert zugewiesen. Die ausgewählte Variable wird mit dem angegebenen Wert überschrieben, die andere Variable bleibt unverändert.
17 Zeichen:
if b:y=z
else:x=z
Das Zuweisen eines bedingten Werts ist einfach , aber das Zuweisen zu einer bedingten Variablen scheint umständlich zu sein. Ich frage mich, ob es einen kürzeren Weg gibt, den ich vermisse.
Dies wäre einfach, wenn Sie x,y
stattdessen eine Liste erstellen würden. Nehmen Sie L
jedoch an, dass der Kontext einen ausreichenden Verweis auf die Variablen erfordert L[0]
und L[1]
unzulässig ist. Das Konvertieren dauert zu lange:
20 Zeichen:
L=[x,y];L[b]=z;x,y=L
Der schnellste Weg, den ich kenne, ist mit Python 2 exec
, was bizarr ist:
16 Zeichen, Python 2:
exec"xy"[b]+"=z"
Die Tupelauswahl scheint länger zu sein:
18, 19, 18, 18 Zeichen:
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
Gibt es eine kürzere Methode oder eine zeichenschonende Optimierung? Sie können davon ausgehen, dass b
es sich um 0
oder handelt 1
, nicht nur um Falsey oder Truthy, und Sie können auch Annahmen über die Datentypen und Werte treffen, wenn dies hilfreich ist.
x,y=C(x,y,z,b)
(14 Zeichen) eine dieser Implementierungen in den Rumpf von einfügenC
.