2017-07-24 1 views
3

So habe ich den folgenden Python-Code, die Nummern 1 bis 10 in die Liste anhängt values:Warum a.insert (-1, x) a.append (x) nicht nachahmt?

values = [] 

for value in range(1, 11): 
    values.append(value) 

print(values) 

Und, wie erwartet, gibt uns [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].

Obwohl unpraktisch, nur aus Neugier, habe ich versucht, dieses Ergebnis statt append() mit insert() neu zu erstellen:

values = [] 

for value in range(1, 11): 
    values.insert(-1, value) 

print(values) 

Welche [2, 3, 4, 5, 6, 7, 8, 9, 10, 1] mir das Ergebnis gab.

Ich habe versucht, dies mit anderen Bereichen als gut, und das gleiche passiert jedes Mal: ​​Es ist in aufsteigender Reihenfolge, mit Ausnahme der kleinsten Zahl am Ende zu sein.

Von der Python Documentation Tutorial, weiß ich jetzt, dass a.insert(len(a), x) verwendet werden kann, um a.append(x) nachzuahmen. Ich verstehe jedoch immer noch nicht, warum das Einfügen der Werte an die letzte Position in einer Liste außer für den kleinsten Wert funktioniert.

+0

Eine Sache, die Einlage ist zu beachten, Die Funktion fügt den Wert am Index ein und erhöht den Index aller Werte (auf und nach dem Index). Also ist die erste Insert [1] (jetzt ist 1 bei Index -1), dann ist [2,1] (jetzt ist 1 bei Index -1) dann [2,3,1] und so weiter. –

Antwort

2

Die grundlegende Sache zu verstehen ist, dass -1 ist nicht das gleiche wie len(a). Es ist in der Tat die gleiche wie len(a) - 1:

In [396]: x = [1, 2, 3] 

In [397]: x[-1] 
Out[397]: 3 

In [398]: x[len(x) - 1] 
Out[398]: 3 

Wenn die Liste der Größe 1 und mehr, dann len(a) - 1 wird immer auf den Punkt Punkt kurz vor dem letzten Element (oder, technisch gesehen, an der Stelle, an der das letzte Element derzeit ist), wo list.insert wird Ihr neues Element setzen.

In [400]: x.insert(-1, 4); x 
Out[400]: [1, 2, 4, 3] 

Wie Sie bereits herausgefunden, len(a) Punkte an die Stelle unmittelbar nach dem letzten Element, das ist, wo list.append Einsätze Elemente. Also, -1 oder len(a) - 1 wird an die Stelle des letzten Elements zeigen und list.insert(-1, ...) wird das letzte Element auf der rechten Seite drücken, und legen Sie das neue Element in der alten Position des letzten Elements.

1

Wenn Sie das erste Element einzufügen, die Nummer 1 ist, wird es auf die genaue Ende der Liste eingefügt, weil es in der Liste nicht andere Artikel ist. Sobald dies geschehen ist, tritt der Rest der Einsätze vor dem letzten Elemente der Liste, weil -1 das letzte Element der Liste und insert() Einsätze vor dem angegebenen Index.

Ich bin eigentlich irgendwie überrascht, dass insert() bei allen Arbeiten auf eine leere Liste.

2

Ich denke, das passiert, weil insert in das Element rechts vor die angegebene Position setzt. Also, was a.insert(-1, value) tut, ist, bringt es die value direkt vor dem letzten Element, und daher wird die zweite dauern. Wenn die Liste jedoch leer ist, gibt es kein zweites vorletztes Element und es wird im letzten Index platziert.

>>> a=[] 
>>> a.insert(-1, 1) 
>>> a 
[1] #list is empty so it is inserted in the last index 
>>> a.insert(-1, 2) 
>>> a 
[2, 1] #It placed the 2 on the second to last position, right before the 1 
1

Das ist, weil -1 die len(value)-1 oder den Index des letzten Elements in der Liste übereinstimmt, also wenn Sie entpacken Ihre list.insert() ruft Ihre value Liste Änderungen wie:

[] # insert(-1, 1) -> -1 translates to -1 (unclear state) 
[1] # insert(-1, 2) -> -1 translates to 0 
[2, 1] # insert(-1, 3) -> -1 translates to 1 
[2, 3, 1] # insert(-1, 4) -> -1 translates to 2 
[2, 3, 4, 1] # insert(-1, 5) -> -1 translates to 3 
[2, 3, 4, 5, 1] # insert(-1, 6) -> -1 translates to 4 
[2, 3, 4, 5, 6, 1] # insert(-1, 7) -> -1 translates to 5 
[2, 3, 4, 5, 6, 7, 1] # insert(-1, 8) -> -1 translates to 6 
[2, 3, 4, 5, 6, 7, 8, 1] # insert(-1, 9) -> -1 translates to 7 
[2, 3, 4, 5, 6, 7, 8, 9, 1] # insert(-1, 10) -> -1 translates to 8 
[2, 3, 4, 5, 6, 7, 8, 9, 10, 1]