În Python, cum obțineți ultimul element al unei liste?
Cum să obțineți ultimul element al unei liste?
Răspunsuri (18)
some_list[-1]
este cel mai scurt și cel mai pitonic.
De fapt, puteți face mult mai mult cu această sintaxă. Sintaxa some_list[-n]
primește până la al n-lea element. Deci some_list[-1]
primește ultimul element, some_list[-2]
primește penulul, etc, până la some_list[-len(some_list)]
, care vă oferă primul element.
De asemenea, puteți seta elementele listei în acest fel. De exemplu:
>>> some_list = [1, 2, 3]
>>> some_list[-1] = 5 # Set the last element
>>> some_list[-2] = 3 # Set the second to last element
>>> some_list
[1, 3, 5]
Rețineți că obținerea unui articol de listă după index va genera un IndexError
dacă obiectul nu există. Aceasta înseamnă că some_list[-1]
va ridica o excepție dacă some_list
este goală, deoarece o listă goală nu poate avea un ultim element.
some_list.last
- ar fi o linie de cod frumoasă
- person Dmitry P.; 20.01.2020
Dacă obiectele dvs. str()
sau list()
s-ar putea să fie goale ca: astr = ''
sau alist = []
, atunci s-ar putea să doriți să utilizați alist[-1:]
în loc de alist[-1]
pentru „asemănarea” obiectului.
Semnificația acestui lucru este:
alist = []
alist[-1] # will generate an IndexError exception whereas
alist[-1:] # will return an empty list
astr = ''
astr[-1] # will generate an IndexError exception whereas
astr[-1:] # will return an empty str
În cazul în care se face distincția este că returnarea unui obiect listă gol sau a unui obiect str gol este mai mult „ultimul element”-cum ar fi decât un obiect excepție.
if len(my_vector) == 0 or my_vector[-1] != update_val
este un model funcțional. dar cu siguranță nu este o soluție globală - ar fi bine să existe o formă de sintaxă în care rezultatul nu a fost None
- person Mark Mullin; 05.03.2017
De asemenea, puteți face:
last_elem = alist.pop()
Depinde de ce vrei să faci cu lista ta, deoarece metoda pop()
va șterge ultimul element.
Cel mai simplu mod de a afișa ultimul element în python este
>>> list[-1:] # returns indexed value
[3]
>>> list[-1] # returns value
3
Există multe alte metode pentru a atinge un astfel de obiectiv, dar acestea sunt scurte și dulci de utilizat.
list[-1]
va genera erori.
- person anon01; 15.02.2018
În Python, cum obțineți ultimul element al unei liste?
Pentru a obține doar ultimul element,
- fără a modifica lista și
- presupunând că știți că lista are un ultim element (adică nu este goală)
trece -1
la notația indice:
>>> a_list = ['zero', 'one', 'two', 'three']
>>> a_list[-1]
'three'
Explicaţie
Indecii și feliile pot lua drept argumente numere întregi negative.
Am modificat un exemplu de din documentație pentru a indica ce articol dintr-o secvență fiecare index referințe, în acest caz, în șirul "Python"
, -1
face referire la ultimul element, caracterul, 'n'
:
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5
-6 -5 -4 -3 -2 -1
>>> p = 'Python'
>>> p[-1]
'n'
Atribuire prin despachetare iterabilă
Această metodă poate materializa în mod inutil o a doua listă doar în scopul obținerii ultimului element, dar de dragul completității (și deoarece acceptă orice iterabil - nu doar liste):
>>> *head, last = a_list
>>> last
'three'
Numele variabilei, head este legat de lista inutilă nou creată:
>>> head
['zero', 'one', 'two']
Dacă intenționați să nu faceți nimic cu această listă, acesta ar fi mai potrivit:
*_, last = a_list
Sau, într-adevăr, dacă știți că este o listă (sau cel puțin acceptă notația cu indice):
last = a_list[-1]
Într-o funcție
Un comentator a spus:
Mi-aș dori ca Python să aibă o funcție pentru first() și last() așa cum face Lisp... ar scăpa de o mulțime de funcții lambda inutile.
Acestea ar fi destul de simplu de definit:
def last(a_list):
return a_list[-1]
def first(a_list):
return a_list[0]
Sau folosiți operator.itemgetter
:
>>> import operator
>>> last = operator.itemgetter(-1)
>>> first = operator.itemgetter(0)
In orice caz:
>>> last(a_list)
'three'
>>> first(a_list)
'zero'
Cazuri speciale
Dacă faci ceva mai complicat, s-ar putea să găsești mai performant să obții ultimul element în moduri ușor diferite.
Dacă sunteți nou în programare, ar trebui să evitați această secțiune, deoarece cuplează părți diferite din punct de vedere semantic ale algoritmilor. Dacă vă schimbați algoritmul într-un loc, acesta poate avea un impact nedorit asupra unei alte linii de cod.
Încerc să ofer avertismente și condiții cât de complet pot, dar poate că am omis ceva. Vă rugăm să comentați dacă credeți că omit o avertizare.
Tăierea
O porțiune dintr-o listă returnează o nouă listă - așa că putem tăia de la -1 până la sfârșit dacă vrem să dorim elementul într-o listă nouă:
>>> a_slice = a_list[-1:]
>>> a_slice
['three']
Acest lucru are avantajul de a nu eșua dacă lista este goală:
>>> empty_list = []
>>> tail = empty_list[-1:]
>>> if tail:
... do_something(tail)
În timp ce încercarea de a accesa prin index generează un IndexError
care ar trebui gestionat:
>>> empty_list[-1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
Dar din nou, felierea în acest scop ar trebui făcută numai dacă aveți nevoie de:
- o nouă listă creată
- iar noua listă să fie goală dacă lista anterioară era goală.
for
bucle
Ca o caracteristică a lui Python, nu există o acoperire interioară într-o buclă for
.
Dacă efectuați deja o iterație completă peste listă, ultimul element va fi referit în continuare prin numele variabilei atribuit în buclă:
>>> def do_something(arg): pass
>>> for item in a_list:
... do_something(item)
...
>>> item
'three'
Acesta nu este din punct de vedere semantic ultimul lucru din listă. Acesta este, din punct de vedere semantic, ultimul lucru la care a fost legat numele, item
.
>>> def do_something(arg): raise Exception
>>> for item in a_list:
... do_something(item)
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "<stdin>", line 1, in do_something
Exception
>>> item
'zero'
Prin urmare, acest lucru ar trebui folosit doar pentru a obține ultimul element dacă dvs
- sunt deja în buclă și
- știți că bucla se va termina (nu se va întrerupe sau nu va ieși din cauza erorilor), altfel va indica ultimul element referit de buclă.
Obținerea și îndepărtarea acestuia
De asemenea, putem modifica lista noastră originală eliminând și returnând ultimul element:
>>> a_list.pop(-1)
'three'
>>> a_list
['zero', 'one', 'two']
Dar acum lista originală este modificată.
(-1
este de fapt argumentul implicit, deci list.pop
poate fi folosit fără un argument index):
>>> a_list.pop()
'two'
Fă asta doar dacă
- știți că lista conține elemente sau sunteți pregătit să gestionați excepția dacă este goală și
- intenționați să eliminați ultimul element din listă, tratându-l ca pe o stivă.
Acestea sunt cazuri de utilizare valide, dar nu foarte frecvente.
Salvează restul reversului pentru mai târziu:
Nu știu de ce ați face-o, dar pentru a fi complet, deoarece reversed
returnează un iterator (care acceptă protocolul iterator), puteți transmite rezultatul lui next
:
>>> next(reversed([1,2,3]))
3
Deci este ca și cum ai face inversul:
>>> next(iter([1,2,3]))
1
Dar nu mă pot gândi la un motiv bun pentru a face acest lucru, cu excepția cazului în care veți avea nevoie de restul iteratorului invers mai târziu, care probabil ar arăta mai mult astfel:
reverse_iterator = reversed([1,2,3])
last_element = next(reverse_iterator)
use_later = list(reverse_iterator)
si acum:
>>> use_later
[2, 1]
>>> last_element
3
Pentru a preveni IndexError: list index out of range
, utilizați această sintaxă:
mylist = [1, 2, 3, 4]
# With None as default value:
value = mylist and mylist[-1]
# With specified default value (option 1):
value = mylist and mylist[-1] or 'default'
# With specified default value (option 2):
value = mylist[-1] if mylist else 'default'
lst[-1]
este cea mai bună abordare, dar cu iterabile generale, luați în considerare more_itertools.last
a>:
Cod
import more_itertools as mit
mit.last([0, 1, 2, 3])
# 3
mit.last(iter([1, 2, 3]))
# 3
mit.last([], "some default")
# 'some default'
O alta metoda:
some_list.reverse()
some_list[0]
O(n)
, chiar dacă aveți opțiunea de a face în O(1)
.
- person say_my_name; 08.06.2021
list[-1]
va prelua ultimul element al listei fără a modifica lista. list.pop()
va prelua ultimul element al listei, dar va modifica/schimba lista originală. De obicei, mutarea listei originale nu este recomandată.
Alternativ, dacă, dintr-un motiv oarecare, căutați ceva mai puțin pitonic, puteți folosi list[len(list)-1]
, presupunând că lista nu este goală.
Puteți folosi și codul de mai jos, dacă nu doriți să obțineți IndexError când lista este goală.
next(reversed(some_list), None)
Ok, dar cum rămâne cu obișnuit în aproape orice limbă items[len(items) - 1]
? Aceasta este IMO cea mai simplă modalitate de a obține ultimul element, deoarece nu necesită cunoștințe pythonice.
some_list[-1]
, deoarece este mai logică și arată ce face de fapt mai bine decât some_list[-1]
după părerea mea.
- person Byron Filer; 05.11.2016
my_test = []
last_item = my_test[len(my_test) - 1]
. Acest lucru va genera, de asemenea, o excepție pentru IndexError
ca și alte răspunsuri. Deși, cred că excepțiile sunt valide și bune pentru că știu ce să fac cu modelul meu preferat de codare try:...except:...else:...finally:...
în Python.
- person Fr0zenFyr; 14.04.2018
Calea Pitonică
Deci, să considerăm că avem o listă a = [1,2,3,4]
, în Python Lista poate fi manipulată pentru a ne oferi o parte din ea sau un element din ea, folosind următoarea comandă se poate obține cu ușurință ultimul element.
print(a[-1])
Iată soluția pentru întrebarea dvs.
a=["first","middle","last"] # A sample list
print(a[0]) #prints the first item in the list because the index of the list always starts from 0.
print(a[-1]) #prints the last item in the list.
print(a[-2]) #prints the last second item in the list.
Ieșire:
>>> first
>>> last
>>> middle
Pentru a evita IndexError: listează indexul în afara intervalului, poți folosi această bucată de cod.
list_values = [12, 112, 443]
def getLastElement(lst):
if len(lst) == 0:
return 0
else:
return lst[-1]
print(getLastElement(list_values))
len(lst) == 0
ar returna un șir, atunci când așteptați un int.
- person raulmd13; 29.03.2021
Va trebui doar să luați și să puneți indexul [-1]. De exemplu:
list=[0,1,2]
last_index=list[-1]
print(last_index)
Veți obține 2 ca rezultat.
Accesarea ultimului element din listă în Python:
1: accesați ultimul element cu indexare negativă -1
>> data = ['s','t','a','c','k','o','v','e','r','f','l','o','w']
>> data[-1]
'w'
2. Accesați ultimul element cu metoda pop()
>> data = ['s','t','a','c','k','o','v','e','r','f','l','o','w']
>> data.pop()
'w'
Cu toate acestea, metoda pop va elimina ultimul element din listă.
.pop
este distructiv (după cum este clarificat de alte răspunsuri). Nu numai că primește ultimul element din listă, dar îl elimină și din listă
- person Wondercricket; 08.06.2021
Dacă faceți my_list[-1]
, acesta returnează ultimul element al listei. Indicii de secvență negativă reprezintă poziții de la sfârșitul matricei. Indexarea negativă înseamnă începutul de la sfârșit, -1 se referă la ultimul articol, -2 se referă la ultimul articol etc.
Nu am găsit niciun răspuns care să menționeze asta. Deci adăugând.
Ai putea încerca și some_list[~0]
.
Acesta este simbolul tildei