Lista Python pop()

Este tutorial mostra-lhe tudo o que precisa de saber para o ajudar a dominar o essencial pop() método do tipo de dados de contentor mais fundamental na linguagem de programação Python.

Definição e Utilização:

O método list.pop() remove e devolve o último elemento de um list existente. O método list.pop(index) com o argumento opcional index remove e devolve o elemento na posição index.

Aqui está um pequeno exemplo:

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

Na primeira linha do exemplo, cria-se a lista lst. Em seguida, retira-se e devolve-se o elemento final 3 da lista. O resultado é a lista com apenas dois elementos .

Code Puzzle – Try It Yourself:

Agora conhece o básico. Vamos aprofundar a sua compreensão com um pequeno puzzle de código – pode resolvê-lo?

P>P>Pode também resolver este puzzle e seguir as suas capacidades Python na nossa aplicação interactiva Finxter app.

Sintax:

P>Pode chamar este método em cada objecto de lista em Python. Aqui está a sintaxe:

list.pop(index=-1)

Argumentos:

>th>Descrição

Argumento
index Argumento opcional. É possível definir o índice do elemento a ser removido e devolvido. O argumento padrão leva à remoção do último elemento da lista com índice -1.

Valor de retorno:

O método list.pop() tem valor de retorno Object. Remove o elemento particular da lista (por defeito: o último elemento) e devolve-o directamente à pessoa que telefona.

Video:

    li>The Ultimate Guide to Python Lists

Aqui está a sua folha de consultas em PDF grátis mostrando-lhe todos os métodos da lista Python numa única página simples. Clique na imagem para descarregar o ficheiro PDF de alta resolução, imprimi-lo, e afixá-lo na parede do seu escritório:

Tabela de Conteúdos

Lista Python pop() Por Índice

P>Pode usar o método list.pop(index) com o argumento de índice opcional para remover e devolver o elemento na posição index da lista.

Aqui está um exemplo:

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

Após criar a lista com quatro elementos, primeiro remove e devolve o segundo elemento 'Ann'. Depois, remove e devolve o primeiro elemento 'Alice'. A lista resultante tem apenas dois elementos restantes.

Lista Python pop() First / Front / Left / Head

The list.pop(index) method to with the optional index argument to remove and return the element at position index from the list. Assim, se quiser remover o primeiro elemento da lista, basta definir index=0 chamando list.pop(0). Isto irá rebentar o primeiro elemento da lista.

Aqui está um exemplo:

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

O método pop(0) remove o primeiro elemento 1 da lista de números primos dada no exemplo.

Lista Python pop() Por Valor

Nos dois exemplos anteriores, já se viu como pop elementos por índice. Mas também pode pop por valor?

Sim, pode usando o método list.index(value) que lhe dá o índice do valor do elemento na lista. Agora, pode usar o método list.pop(index) neste índice para remover o valor da lista e obter o resultado como um valor de retorno.

Aqui está um exemplo em que pretende colocar o elemento 7 da lista e armazenar o resultado na variável some_prime.

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

Se não está interessado no valor de retorno mas apenas quer remover a primeira ocorrência do valor x no método list, utilize o método list.remove(x).

Artigo relacionado:

  • Lista Python remove()

Lista Python pop() Elementos Múltiplos

Se puder pop um elemento de uma lista Python, a questão natural é se também pode popular múltiplos elementos ao mesmo tempo?

A resposta não. Não é possível rebentar directamente vários elementos de uma lista. Mas pode fazê-lo indirectamente com uma simples declaração de compreensão da lista.

Python List pop() First n Elements

Say, quer popar os primeiros n elementos de uma lista. Como se faz isto?

Cria-se simplesmente uma lista de valores usando a compreensão da lista ódigo> para remover e devolver os primeiros n elementos da lista.

Aqui está outro exemplo:

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

A lista popped contém os primeiros cinco elementos. A lista original contém apenas um elemento.

Python List pop() Last n Elements

Say, queres popar os últimos n elementos de uma lista. Como se faz isto?

Cria-se simplesmente uma lista de valores usando a compreensão da lista ódigo> para remover e devolver os últimos n elementos da lista.

Aqui está outro exemplo:

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

A lista popped contém os últimos cinco elementos. A lista original contém apenas um elemento.

Lista de Python pop() Complexidade temporal

A complexidade temporal do método pop() é constante O(1). Não importa quantos elementos estejam na lista, a colocação de um elemento de uma lista leva o mesmo tempo (mais menos factores constantes).

A razão é que as listas são implementadas com matrizes em cPython. A recuperação de um elemento de uma matriz tem uma complexidade constante. A remoção do elemento de uma matriz também tem uma complexidade constante. Assim, a recuperação e remoção do elemento como é feito pelo método pop() tem também uma complexidade constante em tempo de execução.

Eu escrevi um pequeno script para avaliar a complexidade de tempo de execução do método pop() em 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()

O gráfico resultante mostra que a complexidade de tempo de execução é linear, mesmo que o número de elementos aumente drasticamente:

Python pop()

(Ok, há alguns solavancos mas quem realmente se importa?)

Nota que a complexidade do tempo de execução ainda é linear se popmos o último elemento ou qualquer outro elemento arbitrário da lista.

Lista Python pop() vs remove()

Qual é a diferença entre a lista.pop() e o método list.remove()?

  • O método list.remove(element) remove a primeira ocorrência do método element de um list existente. Não remove, contudo, todas as ocorrências do elemento da lista!
  • O método list.pop() remove e devolve o último elemento de um list já existente. O método list.pop(index) com o argumento opcional index remove e devolve o elemento na posição index.

Assim, o método remove por valor e o método pop remove por índice. Além disso, o método remove nada (opera na própria lista) e o método pop devolve o objecto removido.

Python List Pop and Push (Stack)

Python não tem uma estrutura de dados de pilha incorporada porque não é necessário. Pode simplesmente criar uma lista vazia e chamar-lhe pilha. Depois, usa-se o método stack.append(x) para empurrar o elemento x para a pilha. E processa-se o método stack.pop() para empurrar o elemento mais alto da pilha.

p>Aqui está um exemplo que mostra como empurrar três valores para a pilha e depois removê-los na ordem tradicional First-In Last-Out (FILO) das pilhas.

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

Lista Python pop() Sem Remover

Quer fazer pop() um elemento de uma dada lista sem o remover? Não o faça! Em vez disso, use a indexação simples. Para obter um elemento com indexação i de list, utilize simplesmente o esquema de indexação list. Isto irá manter o elemento original na lista sem o remover.

Lista Python pop() If Not Empty

Como se pode pop() um elemento apenas se a lista não estiver vazia numa única linha de código? Use o operador ternário em Python lst.pop() if lst else None como se segue:

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

Tenta-se rebentar o elemento mais à esquerda cinco vezes de uma lista com apenas três valores. No entanto, não há mensagem de erro devido ao uso proficiente do operador ternário que verifica numa única linha se a lista está vazia. Se estiver vazia, não aparece mas devolve o valor None.

Se não usar o operador ternário neste exemplo, Python irá lançar um IndexError enquanto tenta aparecer de uma lista vazia:

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

Lista Python pop() Fatia

P>Pode aparecer uma fatia inteira de uma vez? Bem, pode remover uma fatia inteira usando a palavra-chave del: para remover a fatia lst da lista, pode chamar del lst. Contudo, não receberá a fatia como valor de retorno, pelo que poderá querer armazenar primeiro a fatia numa variável separada, antes de a remover da lista.

Pop() da Lista Python enquanto Itera

É sempre perigoso alterar uma lista sobre a qual itera actualmente.

Porquê? Porque o iterador é criado apenas uma vez na definição do laço e teimará em dar-te os índices que preparou no início. Se o laço mudar, os índices dos elementos também mudam. Mas o iterador não adapta os índices para ter em conta essas alterações. Aqui está um exemplo:

>>> 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-isto foi inesperado, não foi? Só apareceu a cada segundo elemento da lista. Porquê? Porque na primeira iteração, a variável índice i=0. Agora, retiramos isto da lista. O elemento 1 da lista tem agora índice 0 após a remoção do elemento principal anterior. Mas na segunda iteração do laço, a variável de laço tem índice i=1. Este é o elemento seguinte a ser populado. Mas saltou o elemento 1 da lista no índice de posição 0! Apenas todos os outros elementos são popped como resultado.

Formas alternativas de remover elementos de uma lista

Existem algumas formas alternativas de remover elementos da lista. Ver a tabela de resumo:

>lst.pop()

>del lst

Compreensão da lista

Método Description
lst.remove(x) Remover um elemento da lista (por valor)
Remover um elemento da lista (por índice) e devolver o elemento
lst.clear() Retirar todos os elementos da lista
Retirar um ou mais elementos da lista (por índice ou slice)
Remover todos os elementos que satisfazem uma determinada condição

p>P>Próximo, mergulhará em cada um desses métodos para ganhar alguma compreensão profunda.

remove() – Remove Um Elemento pelo Valor

Para remover um elemento da lista, use o método list.remove(element) que já viu anteriormente:

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

Tente você mesmo:

O método vai da esquerda para a direita e remove a primeira ocorrência do elemento que é igual ao que deve ser removido.

O elemento removido não existe

Se estiver a tentar remover o elemento x da lista, mas x não existe na lista, Python atira um erro de valor:

>>> 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() – Remove An Element by Index

Por defeito, o método pop() remove o último elemento da lista e devolve o elemento.

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

mas também pode definir o argumento de índice opcional. Neste caso, removerá o elemento no índice dado – um segredo de Python pouco conhecido!

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

clear() – Remove Todos os Elementos

O método clear() remove simplesmente todos os elementos de um dado objecto de lista.

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

del – Remove Elementos por Índice ou Fatia

Este truque é também relativamente desconhecido entre os principiantes de Python:

  • Use del lst para remover o elemento no índice.
  • Utilizar del lst para remover todos os elementos da fatia.
>>> lst = list(range(10))>>> lst>>> del lst>>> lst>>> del lst>>> lst

Artigos de blog relacionados:

    Verifica o meu tutorial de fatiagem completo que te torna um cortador mestre em cerca de 15 minutos!

Compreensão de Lista – Remover Elementos Condicionalmente

Okay, isto é uma espécie de batota porque este método não remove realmente elementos de um objecto de lista. Apenas cria uma nova lista com alguns elementos que satisfazem a sua condição.

A compreensão da lista é uma forma compacta de criar listas. A fórmula simples é .

  • Expressão: O que fazer com cada elemento da lista?
  • Contexto: Quais os elementos da lista a seleccionar? Consiste num número arbitrário de para e se declarações.

O exemplo cria a lista .

Também se pode definir uma condição como todos os valores ímpares x%2==1 na parte do contexto, utilizando uma condição if. Isto leva-nos a uma forma de remover todos os elementos que não satisfazem uma determinada condição numa dada lista.

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

Enquanto se itera sobre toda a lista lst, a condição x%2 requer que os elementos sejam estranhos.

Artigos relacionados com o blog:

    Check out my full list comprehension tutorial for maximal learning!

Pop() Thread Safe

Tem vários tópicos que acedem à sua lista ao mesmo tempo? Então precisa de ter a certeza que as operações da lista (tais como pop()) são realmente seguras por threads.

Por outras palavras: pode chamar a operação pop() em dois fios da mesma lista ao mesmo tempo? (E pode ter a certeza de que o resultado é significativo?)

A resposta é sim (se utilizar a implementação cPython). A razão é o bloqueio global do intérprete Python que assegura que um fio que está actualmente a trabalhar no seu código terminará primeiro a sua actual operação básica Python, tal como definida pela implementação cPython. Só se terminar com esta operação é que o próximo fio poderá aceder ao recurso computacional. Isto é assegurado com um esquema sofisticado de bloqueio pela implementação cPython.

A única coisa que precisa de saber é que cada operação básica na implementação do cPython é atómica. É executada integralmente e de imediato antes que qualquer outro fio tenha a possibilidade de funcionar com o mesmo motor virtual. Portanto, não há condições de corrida. Um exemplo para tal condição de corrida seria o seguinte: o primeiro fio lê um valor da lista, o segundo fio sobrescreve o valor, e o primeiro fio sobrescreve novamente o valor invalidando a operação do segundo fio.

Todas as operações cPython são seguras por fio. Mas se combinar essas operações em funções de nível superior, estas não são geralmente seguras por consistirem em muitas (possivelmente intercaladas) operações.

Para onde ir a partir daqui?

O método list.remove(element) remove a primeira ocorrência de element do método list.

Aprendeu os meandros deste importante método de lista Python.

Se continuar a lutar com esses comandos Python básicos e se sentir preso no seu progresso de aprendizagem, eu tenho algo para si: Python One-Liners (Amazon Link).

No livro, dar-lhe-ei uma visão completa de tópicos críticos da informática, tais como aprendizagem de máquinas, expressão regular, ciência de dados, NumPy, e Python básico – tudo numa única linha de código Python!

P>Apanhe o livro da Amazon!

DESCRIÇÃO OFICIAL DE LIVRO: Python One-Liners mostrará aos leitores como realizar tarefas úteis com uma linha de código Python. Após uma breve actualização de Python, o livro cobre tópicos avançados essenciais como fatiagem, compreensão de listas, difusão, funções lambda, algoritmos, expressões regulares, redes neurais, regressão logística e muito mais. Cada uma das 50 secções do livro introduz um problema a resolver, acompanha o leitor através das competências necessárias para resolver esse problema, e depois fornece uma solução Python concisa de uma linha com uma explicação detalhada.

Enquanto trabalhava como investigador em sistemas distribuídos, o Dr. Christian Mayer encontrou o seu amor pelo ensino de estudantes de informática.

Para ajudar os estudantes a atingir níveis mais elevados de sucesso Python, ele fundou o website de educação em programação Finxter.com. É autor do popular livro de programação Python One-Liners (NoStarch 2020), co-autor da série Coffee Break Python de livros auto-publicados, entusiasta de informática, freelancer, e proprietário de um dos 10 maiores blogs Python do mundo.

As suas paixões são escrever, ler, e codificar. Mas a sua maior paixão é servir aspirantes a codificadores através da Finxter e ajudá-los a aumentar as suas capacidades. Pode juntar-se à sua academia de e-mail gratuita aqui.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *