Python List pop()

Este tutorial te muestra todo lo que necesitas saber para ayudarte a dominar el esencial método pop() del tipo de datos contenedor más fundamental del lenguaje de programación Python.

Definición y uso:

El método list.pop() elimina y devuelve el último elemento de un list existente. El método list.pop(index) con el argumento opcional index elimina y devuelve el elemento en la posición index.

Aquí tienes un breve ejemplo:

>>> lst = >>> lst.pop()3>>> lst

En la primera línea del ejemplo, creas la lista lst. A continuación, eliminas y devuelves el último elemento 3 de la lista. El resultado es la lista con sólo dos elementos .

Puzzle de código – Pruébalo tú mismo:

Ahora ya sabes lo básico. Vamos a profundizar en tu comprensión con un pequeño puzzle de código-¿puedes resolverlo?

También puedes resolver este puzzle y hacer un seguimiento de tus habilidades en Python en nuestra aplicación interactiva Finxter.

Sintaxis:

Puedes llamar a este método en cada objeto de lista en Python. Esta es la sintaxis:

list.pop(index=-1)

Argumentos:

Argumento Descripción
index Argumento opcional. Se puede definir el índice del elemento a eliminar y devolver. El argumento por defecto lleva a la eliminación del último elemento de la lista con índice -1.

Valor de retorno:

El método list.pop() tiene valor de retorno Object. Elimina el elemento concreto de la lista (por defecto: el último elemento) y lo devuelve directamente a quien lo ha llamado.

Vídeo:

  • La Guía Definitiva de las Listas de Python

Aquí tienes tu hoja de trucos gratuita en PDF que te muestra todos los métodos de listas de Python en una simple página. Haz clic en la imagen para descargar el archivo PDF de alta resolución, imprímelo y colócalo en la pared de tu oficina:

Tabla de contenidos

Lista Python pop() Por índice.

Puedes utilizar el método list.pop(index) con el argumento opcional índice para eliminar y devolver el elemento en la posición index de la lista.

Aquí tienes un ejemplo:

>>> customers = >>> customers.pop(2)'Ann'>>> customers>>> customers.pop(0)'Alice'>>> customers

Después de crear la lista con cuatro elementos, primero eliminas y devuelves el segundo elemento 'Ann'. A continuación, eliminas y devuelves el primer elemento 'Alice'. A la lista resultante sólo le quedan dos elementos.

Lista Python pop() Primero / Frente / Izquierda / Cabeza

El método list.pop(index) a con el argumento opcional índice para eliminar y devolver el elemento en la posición index de la lista. Así que si quieres eliminar el primer elemento de la lista, simplemente pon index=0 llamando a list.pop(0). Esto hará saltar el primer elemento de la lista.

Aquí tienes un ejemplo:

>>> primes = >>> primes.pop(0)1>>> primes

El método pop(0) elimina el primer elemento 1 de la lista de números primos dada en el ejemplo.

Lista Python pop() Por Valor

En los dos ejemplos anteriores, has visto cómo hacer saltar elementos por índice. Pero, ¿también puedes hacer pop por valor?

Sí, puedes utilizando el método list.index(value) que te da el índice del valor del elemento en la lista. Ahora, puedes utilizar el método list.pop(index) en este índice para eliminar el valor de la lista y obtener el resultado como valor de retorno.

Aquí tienes un ejemplo en el que quieres sacar el elemento 7 de la lista y almacenar el resultado en la variable some_prime.

>>> primes = >>> some_prime = primes.pop(primes.index(7))>>> some_prime7

Si no te interesa el valor de retorno sino que sólo quieres eliminar la primera aparición del valor x en el list, utiliza el método list.remove(x).

Artículo relacionado:

  • Lista Python remove()

Lista Python pop() Múltiples elementos

Si puedes hacer saltar un elemento de una lista Python, la pregunta natural es si también puedes hacer saltar múltiples elementos al mismo tiempo?

La respuesta es no. No se puede sacar directamente varios elementos de una lista. Pero puedes hacerlo indirectamente con una simple sentencia de comprensión de la lista.

Lista de Python pop() Primeros n elementos

Digamos que quieres saltar los primeros n elementos de una lista. Cómo lo haces?

Simplemente creas una lista de valores utilizando la comprensión de listas para eliminar y devolver los primeros n elementos de la lista.

Aquí tienes otro ejemplo:

>>> lst = >>> popped = >>> popped>>> lst

La lista extraída contiene los cinco primeros elementos. A la lista original sólo le queda un elemento.

Lista de Python pop() Últimos n elementos

Digamos que quieres saltar los últimos n elementos de una lista. Cómo lo haces?

Simplemente creas una lista de valores utilizando la comprensión de la lista para eliminar y devolver los últimos n elementos de la lista.

Aquí tienes otro ejemplo:

>>> lst = >>> >>> lst

La lista extraída contiene los últimos cinco elementos. A la lista original sólo le queda un elemento.

Complejidad temporal de Python List pop()

La complejidad temporal del método pop() es constante O(1). No importa cuántos elementos haya en la lista, hacer saltar un elemento de una lista lleva el mismo tiempo (más menos los factores constantes).

La razón es que las listas se implementan con arrays en cPython. Recuperar un elemento de un array tiene una complejidad constante. Eliminar el elemento del array también tiene una complejidad constante. Por lo tanto, recuperar y eliminar el elemento como se hace con el método pop() tiene una complejidad de ejecución constante también.

He escrito un pequeño script para evaluar la complejidad en tiempo de ejecución del método pop() en Python:

import matplotlib.pyplot as pltimport timey = for i in : lst = list(range(i)) t0 = time.time() x = lst.pop(0) t1 = time.time() y.append(t1-t0)plt.plot(y)plt.xlabel("List elements (10**5)")plt.ylabel("Time (sec)")plt.show()

El gráfico resultante muestra que la complejidad en tiempo de ejecución es lineal, incluso si el número de elementos aumenta drásticamente:

Complejidad en tiempo de ejecución Python pop()

(Vale, hay algunos baches pero ¿a quién le importa realmente?)

Nótese que la complejidad en tiempo de ejecución sigue siendo lineal si hacemos saltar el último elemento o cualquier otro elemento arbitrario de la lista.

Python List pop() vs remove()

¿Cuál es la diferencia entre list.pop() y el método list.remove()?

  • El método list.remove(element) elimina la primera aparición del element de un list existente. Sin embargo, ¡no elimina todas las apariciones del elemento en la lista!
  • El método list.pop() elimina y devuelve el último elemento de un list existente. El método list.pop(index) con el argumento opcional index elimina y devuelve el elemento en la posición index.
    • Así, el método remove elimina por valor y el método pop elimina por índice. Además, el método remove no devuelve nada (opera sobre la propia lista) y el método pop devuelve el objeto eliminado.

      Python List Pop and Push (Stack)

      Python no tiene una estructura de datos de pila incorporada porque no es necesaria. Puedes simplemente crear una lista vacía y llamarla stack. Luego, usas el método stack.append(x) para empujar el elemento x a la pila. Y se demanda el método stack.pop() para empujar el elemento más alto de la pila.

      Aquí hay un ejemplo que muestra cómo empujar tres valores a la pila y luego eliminarlos en el orden tradicional First-In Last-Out (FILO) de las pilas.

    >>> stack = >>> stack.append(5)>>> stack.append(42)>>> stack.append("Ann")>>> stack.pop()'Ann'>>> stack.pop()42>>> stack.pop()5>>> stack

    Lista Python pop() Sin Eliminar

    ¿Quieres pop() un elemento de una lista dada sin eliminarlo? ¡No lo hagas! En su lugar, utiliza la indexación simple. Para obtener un elemento con índice i de list, simplemente utiliza el esquema de indexación list. Esto mantendrá el elemento original en la lista sin eliminarlo.

    Lista de Python pop() If Not Empty

    ¿Cómo puedes hacer pop() de un elemento sólo si la lista no está vacía en una sola línea de código? Utiliza el operador ternario en Python lst.pop() if lst else None de la siguiente manera:

    >>> lst = >>> for i in range(5):print(lst.pop() if lst else None)321NoneNone

    Intentas hacer saltar el elemento más a la izquierda cinco veces de una lista con sólo tres valores. Sin embargo, no hay ningún mensaje de error debido a su hábil uso del operador ternario que comprueba en una sola línea si la lista está vacía. Si está vacía, no salta sino que devuelve el valor None.

    Si no usas el operador ternario en este ejemplo, Python lanzará un IndexError al intentar hacer un pop de una lista vacía:

    >>> lst = >>> for i in range(5):print(lst.pop())321Traceback (most recent call last): File "<pyshell#15>", line 2, in <module> print(lst.pop())IndexError: pop from empty list

    Python List pop() Slice

    ¿Puedes hacer un pop de una sola vez? Bueno, puedes eliminar una rebanada entera usando la palabra clave del: para eliminar la rebanada lst de la lista, puedes llamar a del lst. Sin embargo, no obtendrá la rebanada como valor de retorno, por lo que puede querer almacenar la rebanada en una variable separada primero, antes de eliminarla de la lista.

    Lista de Python pop() mientras se itera

    Siempre es peligroso cambiar una lista sobre la que se itera actualmente.

    ¿Por qué? Porque el iterador se crea sólo una vez en la definición del bucle y se empecinará en darte los índices que preparó al principio. Si el bucle cambia, los índices de los elementos también cambian. Pero el iterador no adapta los índices para tener en cuenta esos cambios. He aquí un ejemplo:

    >>> lst = list(range(10))>>> for i in range(len(lst)):lst.pop(i)02468Traceback (most recent call last): File "<pyshell#20>", line 2, in <module> lst.pop(i)IndexError: pop index out of range

    Wow-esto fue inesperado, ¿no? Has hecho saltar sólo uno de cada dos elementos de la lista. ¿Por qué? Porque en la primera iteración, la variable índice i=0. Ahora, eliminamos esto de la lista. El elemento 1 de la lista tiene ahora el índice 0 después de la eliminación del elemento anterior. Pero en la segunda iteración del bucle, la variable del bucle tiene el índice i=1. Este es el siguiente elemento que se va a saltar. Pero se ha saltado el elemento 1 de la lista en la posición índice 0. Solo se salta uno de cada dos elementos como resultado.

    Formas alternativas de eliminar elementos de una lista

    Hay algunas formas alternativas de eliminar elementos de la lista. Consulta la tabla resumen:

    .

    Método Descripción
    lst.remove(x) Quitar un elemento de la lista (por valor)
    lst.pop() Quitar un elemento de la lista (por índice) y devolver el elemento
    lst.clear() Eliminar todos los elementos de la lista
    del lst Eliminar uno o más elementos de la lista (por índice o slice)
    Comprensión de la lista Quitar todos los elementos que cumplan una determinada condición

    A continuación, te adentrarás en cada uno de esos métodos para comprenderlos en profundidad.

    remove() – Eliminar un elemento por valor

    Para eliminar un elemento de la lista, utiliza el método list.remove(element) que ya has visto anteriormente:

    >>> lst = >>> lst.remove("Ann")>>> lst

    Pruébalo tú mismo:

    El método va de izquierda a derecha y elimina la primera ocurrencia del elemento que es igual al que se quiere eliminar.

    El elemento eliminado no existe

    Si estás intentando eliminar el elemento x de la lista pero x no existe en la lista, Python lanza un error Value:

    >>> lst = >>> lst.remove('Frank')Traceback (most recent call last): File "<pyshell#19>", line 1, in <module> lst.remove('Frank')ValueError: list.remove(x): x not in list

    pop() – Eliminar un elemento por índice

    Por defecto, el método pop() elimina el último elemento de la lista y devuelve el elemento.

    >>> lst = >>> lst.pop()'Ann'>>> lst

    Pero también puedes definir el argumento índice opcional. En este caso, eliminarás el elemento en el índice dado-¡un secreto poco conocido de Python!

    >>> lst = >>> lst.pop(1)'Bob'>>> lst

    clear() – Eliminar todos los elementos

    El método clear() simplemente elimina todos los elementos de un objeto de lista dado.

    >>> lst = >>> lst.clear()>>> lst

    Del – Eliminar elementos por índice o rebanada

    Este truco también es relativamente desconocido entre los principiantes de Python:

    • Usa del lst para eliminar el elemento en el índice.
    • Usa del lst para eliminar todos los elementos del slice.
    >>> lst = list(range(10))>>> lst>>> del lst>>> lst>>> del lst>>> lst

    Artículos del blog relacionados:

    • ¡Consulta mi tutorial completo de slicing que te convierte en un maestro del slicer en 15 minutos más o menos!

    Comprensión de listas – Eliminar elementos de forma condicional

    Bien, esto es una especie de trampa porque este método no elimina realmente elementos de un objeto de lista. Simplemente crea una nueva lista con algunos elementos que cumplen su condición.

    La comprensión de la lista es una forma compacta de crear listas. La fórmula simple es .

    • Expresión: ¿Qué hacer con cada elemento de la lista?
    • Contexto: ¿Qué elementos de la lista hay que seleccionar? Consiste en un número arbitrario de sentencias for y if.
      • El ejemplo crea la lista .

        También se puede definir una condición como todos los valores impares x%2==1 en la parte del contexto utilizando una condición if. Esto nos lleva a una forma de eliminar todos los elementos que no cumplen una determinada condición en una lista determinada.

    >>> lst = list(range(10))>>> lst_new = >>> lst_new 

    Mientras se itera sobre toda la lista lst, la condición x%2 requiere que los elementos sean impares.

    Artículos del blog relacionados:

    • ¡Consulta mi tutorial completo de comprensión de listas para aprender al máximo!

    Python List pop() Thread Safe

    ¿Tienes varios hilos que acceden a tu lista al mismo tiempo? Entonces necesitas estar seguro de que las operaciones de la lista (como pop()) son realmente seguras para los hilos.

    En otras palabras: ¿puedes llamar a la operación pop() en dos hilos sobre la misma lista al mismo tiempo? (¿Y puedes estar seguro de que el resultado tiene sentido?)

    La respuesta es sí (si usas la implementación de cPython). La razón es el bloqueo global del intérprete de Python que asegura que un hilo que está trabajando actualmente en su código terminará primero su operación básica actual de Python como se define en la implementación de cPython. Sólo si termina esta operación, el siguiente hilo podrá acceder al recurso computacional. Esto se asegura con un sofisticado esquema de bloqueo por parte de la implementación de cPython.

    Lo único que hay que saber es que cada operación básica en la implementación de cPython es atómica. Se ejecuta completamente y a la vez antes de que cualquier otro hilo tenga la oportunidad de ejecutarse en el mismo motor virtual. Por lo tanto, no hay condiciones de carrera. Un ejemplo de esta condición de carrera sería el siguiente: el primer hilo lee un valor de la lista, el segundo hilo sobrescribe el valor, y el primer hilo sobrescribe el valor de nuevo invalidando la operación del segundo hilo.

    Todas las operaciones de cPython son seguras para los hilos. Pero si se combinan esas operaciones en funciones de nivel superior, esas no son generalmente seguras para hilos ya que consisten en muchas operaciones (posiblemente intercaladas).

    ¿A dónde ir desde aquí?

    El método list.remove(element) elimina la primera aparición de element del list.

    Has aprendido los entresijos de este importante método de lista de Python.

    Si sigues luchando con esos comandos básicos de Python y te sientes atascado en tu progreso de aprendizaje, tengo algo para ti: Python One-Liners (Enlace Amazon).

    En el libro, te daré una visión completa de los temas críticos de la ciencia de la computación como el aprendizaje de la máquina, la expresión regular, la ciencia de datos, NumPy, y los fundamentos de Python – todo en una sola línea de código Python!

    Obtén el libro en Amazon!

    Descripción oficial del libro: Python One-Liners mostrará a los lectores cómo realizar tareas útiles con una línea de código Python. Después de un breve repaso de Python, el libro cubre temas avanzados esenciales como rebanadas, comprensión de listas, difusión, funciones lambda, algoritmos, expresiones regulares, redes neuronales, regresión logística y más. Cada una de las 50 secciones del libro introduce un problema a resolver, guía al lector a través de las habilidades necesarias para resolver ese problema, y luego proporciona una solución concisa en Python de una línea con una explicación detallada.

    Mientras trabajaba como investigador en sistemas distribuidos, el Dr. Christian Mayer encontró su amor por enseñar a los estudiantes de ciencias de la computación.

    Para ayudar a los estudiantes a alcanzar mayores niveles de éxito en Python, fundó el sitio web de educación en programación Finxter.com. Es autor del popular libro de programación Python One-Liners (NoStarch 2020), coautor de la serie Coffee Break Python de libros autopublicados, entusiasta de las ciencias de la computación, freelance y propietario de uno de los 10 mayores blogs de Python en todo el mundo.

    Sus pasiones son escribir, leer y codificar. Pero su mayor pasión es servir a los aspirantes a codificadores a través de Finxter y ayudarles a potenciar sus habilidades. Puedes unirte a su academia gratuita por correo electrónico aquí.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *