Jak zamienić dwie zmienne w pythonie? Pytanie niby proste, ale nie do końca, po tym jaka jest odpowiedź, można określić stopień znajomości języka :)
Określmy zadanie: Mamy dwie zmienne x
oraz y
, których zawartość chcemy zamienić. W x
ma być to co w y
, a w y
to co w x
.
Pierwszy pomysł, to użycie zmiennej tymczasowej.
In [1]: x = 1; y = 2 In [2]: z = x In [3]: x = y In [4]: y = z In [5]: x, y Out[5]: (2, 1)
Pomysł poprawny w działaniu, ale trzeba się sporo napisać, no i nie wygląda to najlepiej w oczach osób, które znają trochę pythona.
Pomysł numer dwa - wygrzebałem gdzieś w odmętach internetów. Trąci jakimś asemblerowym zacięciem, ale o dziwo działa. Oparty na metodzie XOR.
In [1]: x = 1; y = 2 In [2]: x = x ^ y In [3]: y = y ^ x In [4]: x = x ^ y In [5]: x, y Out[5]: (2, 1)
Trzeci pomysł - wg mnie najbardziej pytoniczny, to rozpakowywanie tupli.
In [1]: x = 1; y = 2 In [2]: x, y = y, x In [3]: x, y Out[3]: (2, 1)
Działa to mniej więcej tak, że python ewaluuje prawą część wyrażenia, czego wynikiem jest tupla. Następnie rozpakowywuje ją do dwóch zmiennych. Ot i cała pythoniczna magia :).
Według mnie trzeci sposób świadczy o najlepszej znajomości pythona i stosowaniu najprostszych metod w kontekście znajomości pythona, drugi o znajomości trików i obejść programistycznych, pierwszy o stosowaniu najprostszych możliwych metod w ogóle.