Pop-index buiten bereik

In deze code krijg ik een foutmelding dat de pop-index van gin indexListbuiten bereik is.
Hier is de uitvoer:

[0, 1, 2, 3, 4, 5, 6, 7]
4 7
Traceback (most recent call last):
indexList.pop(g)
IndexError: pop index out of range

Ik begrijp het niet, gheeft een waarde van 7, de lijst bevat 7 waarden, waarom kan ik de 7 in de lijst niet teruggeven?


Antwoord 1, autoriteit 100%

Om de uiteindelijke waarde van een lijst te laten verschijnen, kunt u dit als volgt doen:

>>> l=range(8)
>>> l
[0, 1, 2, 3, 4, 5, 6, 7]
>>> l.pop(4)                    # item at index 4
4
>>> l
[0, 1, 2, 3, 5, 6, 7]
>>> l.pop(-1)                   # item at end - equivalent to pop()
7
>>> l
[0, 1, 2, 3, 5, 6]
>>> l.pop(-2)                   # one left of the end 
5
>>> l
[0, 1, 2, 3, 6]
>>> l.pop()                     # always the end item
6
>>> l
[0, 1, 2, 3]

Houd er rekening mee dat pophet item verwijdert, en de lijst verandert van lengte na de pop. Gebruik negatieve getallen om te indexeren vanaf het einde van een lijst die mogelijk in grootte verandert, of gebruik gewoon pop() zonder argumenten voor het einditem.

Aangezien een pop deze fouten kan produceren, zie je ze vaak in een uitzonderingsblok:

>>> l=[]
>>> try:
...    i=l.pop(5)
... except IndexError:
...    print "sorry -- can't pop that"
... 
sorry -- can't pop that

Antwoord 2, Autoriteit 86%

Nadat u de 4 POP hebt, heeft de lijst slechts 7 waarden. Als u print indexListafdrukken na uw pop(f), ziet het eruit:

[0, 1, 2, 3, 5, 6, 7]

Antwoord 3, Autoriteit 57%

Samen met alle andere antwoorden, het belangrijkste deel over de functie pop()is dat het de waarde uit de array verwijdert, waardoor de indexen worden gewijzigd. Na popping-index 4 staat uw lijst met 7 items. Het is belangrijk om te weten dat Python-indexen vanaf 0 beginnen, dus uw 7-itemlijst bevat alleen indexen 0 tot 6. Daarom is popping-index 7 buiten de grenzen, het bestaat niet meer.

Meestal wordt een “popping” -functie gebruikt bij het implementeren van een stapel of een wachtrij waar het doel is om een ​​waarde te krijgen van een lijst met waarden die wachten om te zijn verwerkt. Om dezelfde gegevens twee keer per ongeluk te verwerken, zorgt u ervoor dat u het tegelijkertijd als ophalen verwijdert.

Soms kunnen stapels en wachtrijen worden geïmplementeerd met een peekWERKING die alleen de waarde terugkeert zonder deze te verwijderen, maar aangezien Python stapels en wachtrijen implementeert, met behulp van regelmatige arrays zonder speciale wikkel Wees de standaard array[index]CALL.

—- bewerken —-
Het komt me voor dat het zo kan zijn dat in plaats van het item op index7 te verwijderen, je de waarde7 wilt verwijderen. Als dat het geval is, bel dan indexList.remove(7). Dit verwijdert de eerste instantie van 7in uw lijst, ongeacht de index (en geeft een foutmelding als er geen waarde 7is). Ik ben er vrij zeker van dat je begrijpt dat pop()een index neemt.

Voor het geval dat, bekijk de Python datastructures APIvoor meer informatie over welke functies beschikbaar zijn, wat ze doen en welke argumenten ze gebruiken.

Other episodes