Obtener el último elemento de una lista en Python


En Python, ¿cómo se obtiene el último elemento de una lista?

Author: APerson, 2009-05-30

14 answers

some_list[-1] es el más corto y más pitónico.

De hecho, puede hacer mucho más con esta sintaxis. La sintaxis some_list[-n] obtiene el enésimo al último elemento. Así que some_list[-1] obtiene el último elemento, some_list[-2] obtiene el penúltimo, etc, todo el camino hasta some_list[-len(some_list)], que le da el primer elemento.

También puede establecer elementos de lista de esta manera. Por ejemplo:

>>> 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]
 2290
Author: Sasha Chedygov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-16 17:30:32

Si sus objetos str() o list() pueden terminar vacíos como así: astr = '' o alist = [], entonces es posible que desee usar alist[-1:] en lugar de alist[-1] para el objeto "igualdad".

El significado de esto es:

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

Donde la distinción que se hace es que devolver un objeto list vacío o un objeto str vacío es más "último elemento"-como un objeto exception.

 190
Author: DevPlayer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-08 18:40:54

También puedes hacer:

alist.pop()

Depende de lo que quieras hacer con tu lista porque el método pop() eliminará el último elemento.

 69
Author: Taurus Olson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-15 13:15:06

La forma más sencilla de mostrar el último elemento en python es

>>> list[-1:] # returns indexed value
    [3]
>>> list[-1]  # returns value
    3

Hay muchos otros métodos para lograr tal objetivo, pero estos son cortos y dulces de usar.

 54
Author: Atul Arvind,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-21 04:53:04

En Python, ¿cómo se obtiene el último elemento de una lista?

Para obtener el último elemento,

  • sin modificar la lista, y
  • suponiendo que sepa que la lista tiene un último elemento (es decir, no está vacío)

Pase -1 a la notación de subíndice:

>>> a_list = ['zero', 'one', 'two', 'three']
>>> a_list[-1]
'three'

Explicación

Los índices y las secciones pueden tomar enteros negativos como argumentos.

He modificado un ejemplo de la documentación para indicar a qué elemento de una secuencia hace referencia cada índice, en este caso, en la cadena "Python", -1 referencias al último elemento, el carácter, 'n':

 +---+---+---+---+---+---+
 | P | y | t | h | o | n |
 +---+---+---+---+---+---+
   0   1   2   3   4   5 
  -6  -5  -4  -3  -2  -1

>>> p = 'Python'
>>> p[-1]
'n'

Asignación mediante desembalaje iterable

Este método puede materializar innecesariamente una segunda lista con el propósito de obtener el último elemento, pero por el bien de la integridad (y ya que soporta cualquier iterable - no solo listas):

>>> *head, last = a_list
>>> last
'three'

El nombre de la variable, head está ligado a lista recién creada innecesaria:

>>> head
['zero', 'one', 'two']

Si tiene la intención de no hacer nada con esa lista, esto sería más apropiado: {[38]]}

*_, last = a_list

O, realmente, si sabes que es una lista (o al menos acepta la notación de subíndices):

last = a_list[-1]

En una función

Un comentarista dijo:

Desearía que Python tuviera una función para first() y last() como Lisp... se desharía de muchas funciones innecesarias de lambda.

Estos serían bastante simples para definir:

def last(a_list):
    return a_list[-1]

def first(a_list):
    return a_list[0]

O use operator.itemgetter:

>>> import operator
>>> last = operator.itemgetter(-1)
>>> first = operator.itemgetter(0)

En cualquier caso:

>>> last(a_list)
'three'
>>> first(a_list)
'zero'

Casos especiales

Si estás haciendo algo más complicado, es posible que te resulte más eficiente obtener el último elemento de maneras ligeramente diferentes.

Si eres nuevo en la programación, debes evitar esta sección, porque combina partes semánticamente diferentes de los algoritmos. Si cambia su algoritmo en un lugar, puede tener un impacto no deseado en otro línea de código.

Trato de proporcionar advertencias y condiciones tan completamente como puedo, pero puede que me haya perdido algo. Por favor, comente si cree que estoy dejando una advertencia.

Rebanado

Una porción de una lista devuelve una nueva lista - así que podemos dividir desde -1 hasta el final si vamos a querer el elemento en una nueva lista:

>>> a_slice = a_list[-1:]
>>> a_slice
['three']

Esto tiene la ventaja de no fallar si la lista está vacía:

>>> empty_list = []
>>> tail = empty_list[-1:]
>>> if tail:
...     do_something(tail)

Considerando que intentar acceder por índice plantea un IndexError que tendría que ser manejado:

>>> empty_list[-1]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

Pero nuevamente, el corte para este propósito solo debe hacerse si necesita:

  • una nueva lista creada
  • y la nueva lista estará vacía si la lista anterior estaba vacía.

for bucles

Como característica de Python, no hay un ámbito interno en un bucle for.

Si ya está realizando una iteración completa sobre la lista, el último elemento seguirá siendo referenciado por el nombre de variable asignado en el bucle:

>>> def do_something(arg): pass
>>> for item in a_list:
...     do_something(item)
...     
>>> item
'three'

Esto no es semánticamente lo último en la lista. Esto es semánticamente lo último a lo que el nombre, item, estaba obligado.

>>> 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'

Por lo tanto, esto solo debe usarse para obtener el último elemento si

  • ya están en bucle, y
  • sabe que el bucle terminará (no se romperá ni saldrá debido a errores), de lo contrario apuntará al último elemento al que hace referencia el bucle.

Conseguir y quitarlo

También podemos mutar nuestra lista original eliminando y devolviendo el último elemento:

>>> a_list.pop(-1)
'three'
>>> a_list
['zero', 'one', 'two']

Pero ahora se modifica la lista original.

(-1 es en realidad el argumento por defecto, por lo que list.pop se puede usar sin un argumento index):

>>> a_list.pop()
'two'

Solo haga esto si

  • usted sabe que la lista tiene elementos en ella, o está preparado para manejar la excepción si está vacía, y
  • tiene la intención de eliminar el último elemento de la lista, tratándolo como una pila.

Estos son casos de uso válidos, pero no muy comunes.

Guardando el resto del reverso para más tarde:

No se por qué lo harías, sino por completo, ya que reversed devuelve un iterador (que soporta el protocolo iterador) puede pasar su resultado a next:

>>> next(reversed([1,2,3]))
3

Así que es como hacer lo contrario de esto:{[38]]}

>>> next(iter([1,2,3]))
1

Pero no se me ocurre una buena razón para hacer esto, a menos que necesites el resto de lo contrario iterador más tarde, que probablemente se vería más como esto:

reverse_iterator = reversed([1,2,3])
last_element = next(reverse_iterator)

use_later = list(reverse_iterator)

Y ahora:

>>> use_later
[2, 1]
>>> last_element
3
 23
Author: Aaron Hall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-21 03:41:25
mylist = [ 1 , 2 , 3 , 4 , 5]

#------------------------------------
# Method-1 : Last index
#------------------------------------

print(mylist[-1])


#------------------------------------
# Method-2 : Using len 
#------------------------------------

print(mylist[len(mylist) - 1])


#------------------------------------
# Method-3 : Using pop, pop will remove the last 
#            element from the list.
#------------------------------------

print(mylist.pop())
 7
Author: Fuji Clado,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-21 09:06:39

Si desea simplemente obtener el último valor de list, debe usar:

your_list[-1]

PERO si desea get valor y también eliminar de lista, se puede usar :

your_list.pop()

O: también puedes hacer pop con index...

your_list.pop(-1)
 5
Author: a_m_dev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-15 21:16:09

Está bien, pero ¿qué pasa con lo común en casi todos los idiomas items[len(items) - 1]? Esta es IMO la forma más fácil de obtener el último elemento, porque no requiere nada conocimiento pitónico.

 4
Author: Radek Anuszewski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-07 17:22:04

Some_list = [1, 2, 3]

Método 1:

some_list[-1]

Método 2:

**some_list.reverse()** 

**some_list[0]**

Método 3:

some_list.pop() 
 4
Author: Sanjay Pradeep,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-10 12:32:06

Fecha: 2017-12-06

alist.pop()

Hago una lista exhaustiva de todos los 11 métodos de la lista para su referencia.

{'list_methods': {'Add': {'extend', 'append', 'insert'},
                  'Entire': {'clear', 'copy'},
                  'Search': {'count', 'index'},
                  'Sort': {'reverse', 'sort'},
                  'Subtract': {'remove', 'pop'}}}
 3
Author: JawSaw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-06 12:28:57

list[-1] recuperará el último elemento de la lista sin cambiar la lista. list.pop() recuperará el último elemento de la lista, pero mutará/cambiará la lista original. Por lo general, no se recomienda mutar la lista original.

Alternativamente, si, por alguna razón, está buscando algo menos pitónico, podría usar list[len(list)-1], asumiendo que la lista no está vacía.

 2
Author: Sondering Narcissist,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-07 02:21:23

También puede usar el código a continuación, si no desea obtener IndexError cuando la lista está vacía.

next(reversed(some_list), None)
 0
Author: Yavuz Mester,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-02 13:23:40

lst[-1] es el mejor enfoque, pero con iterables generales, considere more_itertools.last:

Código

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'
 0
Author: pylang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-01 03:08:19

Python list soporta índices negativos.

a = [1, 2, 3]

a[-1] # gives the last elements with negative indexes

O

a[len(a) - 1] # gives the last elements len function

 0
Author: Vishvajit Pathak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-23 17:20:43