Das Ersetzen von zwei Elementen in einer Liste zeigt unerwartetes Verhalten

8

Ich habe eine Liste:

%Vor%

Ich möchte 12 und 89 so austauschen, dass die Liste

aussehen sollte %Vor%

Wenn ich es so mache

%Vor%

Nichts wird geändert

%Vor%

Aber wenn ich es so mache

%Vor%

Es funktioniert perfekt

%Vor%

Warum funktioniert das nicht auf die erste Art? PS: Der Grund, warum ich den ersten Weg gehen möchte, ist, dass ich das max-Element in einer Liste finden und dann mit dem ersten Element der Liste tauschen möchte.

Etwas wie:

%Vor%     
Souvik Ray 02.07.2017, 03:48
quelle

1 Antwort

7

Kurz gesagt, lis.index(max1) auf der linken / rechten Seite werden zu verschiedenen Zeiten ausgewertet; dann zu verschiedenen Werten ausgewertet ( 0 für die linke Seite, 4 für die rechte Seite).

%Vor%

Vorstehende Aussage:

  • erstellt (b, a) tuple
  • entpackt das obige Tupel nach a und b
    • a = alter-Wert-von-b
    • b = alter-Wert-von-a
%Vor%

wird

%Vor%

= & gt;

%Vor%

= & gt;

%Vor%

= & gt;

%Vor%

So lis[0] 89 zugewiesen, dann ursprünglichen Wert 0 zurück zugewiesen. = & gt; (Nur das erste Element wurde geändert und der ursprüngliche Wert wurde neu zugewiesen.)

Um dieses Problem zu vermeiden, weisen Sie den Index vor der swap-Anweisung zu:

%Vor%     
falsetru 02.07.2017, 04:24
quelle

Tags und Links