Antworten:
some_list[-1]
ist die kürzeste und pythonischste.
Mit dieser Syntax können Sie sogar noch viel mehr tun. Die some_list[-n]
Syntax erhält das n-te vorletzte Element. So some_list[-1]
bekommt das letzte Element, some_list[-2]
erhält die vorletzte, usw., den ganzen Weg hinunter zu some_list[-len(some_list)]
, mit dem Sie das erste Element gibt.
Auf diese Weise können Sie auch Listenelemente festlegen. Zum Beispiel:
>>> 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]
Beachten Sie, dass beim Abrufen eines Listenelements nach Index ein ausgelöst wird, IndexError
wenn das erwartete Element nicht vorhanden ist. Dies bedeutet, dass some_list[-1]
eine Ausnahme ausgelöst some_list
wird, wenn sie leer ist, da eine leere Liste kein letztes Element enthalten kann.
Wenn Ihre str()
oder list()
Objekte möglicherweise leer sind: astr = ''
oder alist = []
, dann möchten Sie möglicherweise alist[-1:]
anstelle von alist[-1]
"Objektgleichheit" verwenden.
Die Bedeutung davon ist:
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
Wenn unterschieden wird, ist die Rückgabe eines leeren Listenobjekts oder eines leeren str-Objekts eher "letztes Element" als ein Ausnahmeobjekt.
if len(my_vector) == 0 or my_vector[-1] != update_val
ein praktikables Muster. Aber es ist sicherlich keine globale Lösung - es wäre schön, eine Syntaxform zu haben, in der None das Ergebnis war
xs[-1] if xs else None
Sie können auch tun:
alist.pop()
Dies hängt davon ab, was Sie mit Ihrer Liste tun möchten, da die pop()
Methode das letzte Element löscht.
Der einfachste Weg, das letzte Element in Python anzuzeigen, ist
>>> list[-1:] # returns indexed value
[3]
>>> list[-1] # returns value
3
Es gibt viele andere Methoden, um ein solches Ziel zu erreichen, aber diese sind kurz und bündig.
list[-1]
ein Fehler auftritt.
a[-1:][0]
überhaupt ? Er sorgt a[-1]
sowieso auch. Erklärung bitte?
Wie erhalten Sie in Python das letzte Element einer Liste?
Um nur das letzte Element zu erhalten,
Übergabe -1
an die tiefgestellte Notation:
>>> a_list = ['zero', 'one', 'two', 'three']
>>> a_list[-1]
'three'
Indizes und Slices können negative Ganzzahlen als Argumente verwenden.
Ich habe ein Beispiel modifizierter aus der Dokumentation , die Artikel in einer Sequenz , um anzuzeigen , jeden Index Referenzen, in diesem Fall in der Zeichenfolge "Python"
, -1
verweist auf das letzte Element, das Zeichen, 'n'
:
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5
-6 -5 -4 -3 -2 -1
>>> p = 'Python'
>>> p[-1]
'n'
Diese Methode kann unnötigerweise eine zweite Liste materialisieren, um nur das letzte Element zu erhalten, aber der Vollständigkeit halber (und da sie jede iterierbare unterstützt - nicht nur Listen):
>>> *head, last = a_list
>>> last
'three'
Der Variablenname head ist an die unnötige neu erstellte Liste gebunden:
>>> head
['zero', 'one', 'two']
Wenn Sie nicht beabsichtigen, mit dieser Liste nichts zu tun, wäre dies eher apropos:
*_, last = a_list
Oder wirklich, wenn Sie wissen, dass es sich um eine Liste handelt (oder zumindest die tiefgestellte Notation akzeptiert):
last = a_list[-1]
Ein Kommentator sagte:
Ich wünschte, Python hätte eine Funktion für first () und last () wie Lisp ... es würde viele unnötige Lambda-Funktionen beseitigen.
Diese wären recht einfach zu definieren:
def last(a_list):
return a_list[-1]
def first(a_list):
return a_list[0]
Oder verwenden Sie operator.itemgetter
:
>>> import operator
>>> last = operator.itemgetter(-1)
>>> first = operator.itemgetter(0)
In beiden Fällen:
>>> last(a_list)
'three'
>>> first(a_list)
'zero'
Wenn Sie etwas Komplizierteres tun, ist es möglicherweise leistungsfähiger, das letzte Element auf etwas andere Weise zu erhalten.
Wenn Sie neu in der Programmierung sind, sollten Sie diesen Abschnitt vermeiden, da er ansonsten semantisch unterschiedliche Teile von Algorithmen miteinander verbindet. Wenn Sie Ihren Algorithmus an einer Stelle ändern, kann dies unbeabsichtigte Auswirkungen auf eine andere Codezeile haben.
Ich versuche, Vorbehalte und Bedingungen so vollständig wie möglich bereitzustellen, aber ich habe möglicherweise etwas verpasst. Bitte kommentieren Sie, wenn Sie denken, dass ich eine Einschränkung auslasse.
Ein Slice einer Liste gibt eine neue Liste zurück. Wir können also von -1 bis zum Ende schneiden, wenn wir das Element in einer neuen Liste haben möchten:
>>> a_slice = a_list[-1:]
>>> a_slice
['three']
Dies hat den Vorteil, dass es nicht fehlschlägt, wenn die Liste leer ist:
>>> empty_list = []
>>> tail = empty_list[-1:]
>>> if tail:
... do_something(tail)
Während der Versuch, über einen Index zuzugreifen, eine Frage aufwirft, IndexError
die behandelt werden müsste:
>>> empty_list[-1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
Aber auch hier sollte das Schneiden nur zu diesem Zweck durchgeführt werden, wenn Sie Folgendes benötigen:
for
SchleifenAls eine Funktion von Python gibt es kein inneres Scoping in einer for
Schleife.
Wenn Sie bereits eine vollständige Iteration über die Liste durchführen, wird das letzte Element weiterhin durch den in der Schleife zugewiesenen Variablennamen referenziert:
>>> def do_something(arg): pass
>>> for item in a_list:
... do_something(item)
...
>>> item
'three'
Dies ist semantisch nicht das Letzte in der Liste. Dies ist semantisch das Letzte, an das der Name item
gebunden war.
>>> 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'
Daher sollte dies nur verwendet werden, um das letzte Element zu erhalten, wenn Sie
Wir können unsere ursprüngliche Liste auch mutieren, indem wir das letzte Element entfernen und zurückgeben:
>>> a_list.pop(-1)
'three'
>>> a_list
['zero', 'one', 'two']
Aber jetzt wird die ursprüngliche Liste geändert.
( -1
ist eigentlich das Standardargument, list.pop
kann also ohne Indexargument verwendet werden):
>>> a_list.pop()
'two'
Tun Sie dies nur, wenn
Dies sind gültige Anwendungsfälle, aber nicht sehr häufig.
Ich weiß nicht, warum Sie das tun würden, aber der Vollständigkeit halber können Sie das Ergebnis übergeben , da reversed
ein Iterator zurückgegeben wird (der das Iterator-Protokoll unterstützt) next
:
>>> next(reversed([1,2,3]))
3
Es ist also so, als würde man das Gegenteil tun:
>>> next(iter([1,2,3]))
1
Aber ich kann mir keinen guten Grund dafür vorstellen, es sei denn, Sie benötigen später den Rest des Reverse-Iterators, der wahrscheinlich eher so aussehen würde:
reverse_iterator = reversed([1,2,3])
last_element = next(reverse_iterator)
use_later = list(reverse_iterator)
und nun:
>>> use_later
[2, 1]
>>> last_element
3
IndexError: list index out of range
Verwenden Sie diese Syntax, um dies zu verhindern :
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'
Eine andere Methode:
some_list.reverse()
some_list[0]
lst[-1]
ist der beste Ansatz, aber mit allgemeinen Iterabilitäten sollten Sie Folgendes berücksichtigen more_itertools.last
:
Code
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'
list[-1]
ruft das letzte Element der Liste ab, ohne die Liste zu ändern.
list.pop()
wird das letzte Element der Liste abrufen, aber die ursprüngliche Liste wird mutiert / geändert. Normalerweise wird das Mutieren der ursprünglichen Liste nicht empfohlen.
Wenn Sie aus irgendeinem Grund nach etwas weniger Pythonischem suchen, können Sie es auch verwenden list[len(list)-1]
, vorausgesetzt, die Liste ist nicht leer.
Sie können auch den folgenden Code verwenden, wenn Sie IndexError nicht erhalten möchten, wenn die Liste leer ist.
next(reversed(some_list), None)
Ok, aber was ist mit in fast jeder Sprache üblich items[len(items) - 1]
? Dies ist IMO der einfachste Weg, um das letzte Element zu erhalten, da es keine pythonischen Kenntnisse erfordert .
some_list[-1]
Ansatz, weil es logischer ist und zeigt, was es tatsächlich besser macht als some_list[-1]
meiner Meinung nach.
some_list.last
- es wäre eine schöne Codezeile