431 Stimmen

Gibt es eine standardisierte Methode zum Austauschen von zwei Variablen in Python?

In Python habe ich gesehen, dass zwei Variablenwerte mit dieser Syntax vertauscht werden:

left, right = right, left

Wird dies als die Standardmethode angesehen, um zwei Variablenwerte auszutauschen, oder gibt es einen anderen Weg, durch den üblicherweise zwei Variablen vertauscht werden?

513voto

eyquem Punkte 25545

Python bewertet Ausdrücke von links nach rechts. Beachten Sie, dass beim Evaluieren einer Zuweisung der rechte Wert vor dem linken Wert evaluiert wird.

Python-Dokumentation: Auswertungsreihenfolge

Das bedeutet Folgendes für den Ausdruck a,b = b,a :

  • Der rechte Wert b,a wird evaluiert, das heißt, ein Tupel aus zwei Elementen wird im Speicher erstellt. Die beiden Elemente sind die Objekte, die durch die Bezeichner b und a bezeichnet werden, die bereits vorhanden waren, bevor die Anweisung während der Programmausführung erreicht wurde.
  • Direkt nach der Erstellung dieses Tupels wurde noch keine Zuweisung dieses Tupelobjekts vorgenommen, aber das spielt keine Rolle, Python weiß intern, wo es sich befindet.
  • Dann wird der linke Wert evaluiert, das heißt, das Tupel wird dem linken Wert zugewiesen.
  • Da der linke Wert aus zwei Bezeichnern besteht, wird das Tupel so entpackt, dass der erste Bezeichner a dem ersten Element des Tupels zugewiesen wird (das Objekt, das vor dem Vertauschen als erstes b war, da es den Namen b hatte)
    und der zweite Bezeichner b dem zweiten Element des Tupels zugewiesen wird (das Objekt, das vor dem Vertauschen als erstes a war, da seine Bezeichner a waren)

Mit diesem Mechanismus wurden effektiv die Objekte vertauscht, die den Bezeichnern a und b zugewiesen sind.

Also, um Ihre Frage zu beantworten: JA, es ist der Standardweg, um zwei Bezeichner für zwei Objekte zu vertauschen.
Übrigens sind die Objekte keine Variablen, sondern Objekte.

129voto

Martijn Pieters Punkte 953257

Das ist die Standardmethode, um zwei Variablen auszutauschen, ja.

42voto

NoOneIsHere Punkte 936

Ich kenne drei Möglichkeiten, Variablen auszutauschen, aber a, b = b, a ist die einfachste. Es gibt

XOR (für ganze Zahlen)

x = x ^ y
y = y ^ x
x = x ^ y

Oder knapp formuliert,

x ^= y
y ^= x
x ^= y

Zwischenspeicher

w = x
x = y
y = w
del w

Tupel-Austausch

x, y = y, x

34voto

Yi Huang Punkte 349

Ich würde nicht sagen, dass es eine Standardmethode zum Austauschen ist, da es einige unerwartete Fehler verursachen wird.

nums[i], nums[nums[i] - 1] = nums[nums[i] - 1], nums[i]

nums[i] wird zuerst geändert und wirkt sich dann auf die zweite Variable nums[nums[i] - 1] aus.

9voto

gizzmole Punkte 1199

Funktioniert nicht für mehrdimensionale Arrays, da hier Referenzen verwendet werden.

import numpy as np

# tauscht
data = np.random.random(2)
print(data)
data[0], data[1] = data[1], data[0]
print(data)

# tauscht nicht
data = np.random.random((2, 2))
print(data)
data[0], data[1] = data[1], data[0]
print(data)

Siehe auch Austausch von Slices von Numpy-Arrays

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X