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
.Antworten:
12 Zeichen / Zuordnung + 9 Zeichen Overhead
Beachten Sie, dass dies nur im globalen Bereich funktioniert und nicht innerhalb einer Funktion.
quelle
V
automatisch aktualisiert wird, ohne dass die Funktion erneut aufgerufen werden muss. Dies macht sich alsoexec
in zwei Fällen bezahlt. Außerdem sind es nurvars()["xy"[b]]=z
17 Zeichen, was das Beste ist, was wir bisher für Python 3 haben, ohne dass der Kontrollflussif/else
Probleme verursachen kann.vars()["xy"[b]]=z
?14 Zeichen, Python 2
Die beiden Variablen sind
y
undxy
. Wenn b = 0 ist, wird dies gesetztxy=z
. Wenn b = 1 ist, setzt diesy=z
. Dies lohnt sich, wennxy
es nicht mehr als einmal an einer anderen Stelle im Code verwendet wird.quelle
xy
mindestens zweimal verwenden, um es zuzuordnen und anschließend vorzulesen.15 Zeichen, Python 2
Erfordert, dass die Variablen aufgerufen werden
F
undT
nichtx
undy
, undb is False
oderb is True
, anstatt die gleichen Zahlen0
oder zu sein1
.Dies erspart ein Zeichen,
"xy"[b]
indem stattdessen der erste Buchstabe der Zeichenfolgendarstellung von verwendet wirdb
, derT
oder istF
.quelle
a
undr
,l
undu
oders
unde
mit entsprechenden Indizes.