a = [1, 2, 3, 4]
b = a.index(6)
del a[b]
print(a)
O acima mostra o seguinte erro:
Traceback (most recent call last):
File "D:\zjm_code\a.py", line 6, in <module>
b = a.index(6)
ValueError: list.index(x): x not in list
Então eu tenho que fazer isso:
a = [1, 2, 3, 4]
try:
b = a.index(6)
del a[b]
except:
pass
print(a)
Mas não há uma maneira mais simples de fazer isso?
except
é uma prática ruim . Useexcept Exception
no mínimo.Respostas:
Para remover a primeira ocorrência de um elemento em uma lista, basta usar
list.remove
:Lembre-se de que ele não remove todas as ocorrências do seu elemento. Use uma lista de compreensão para isso.
fonte
remove
O (n)?Normalmente, o Python lança uma exceção se você pedir para fazer algo que não pode, então você terá que fazer:
ou:
Uma exceção não é necessariamente uma coisa ruim, desde que você esteja esperando e lidando adequadamente.
fonte
a.remove(c)
pode falhar mesmo assim, apesar daif c in a
verificação (a
pode ser modificada em outro segmento após ac in a
verificação, mas antes daa.remove(c)
chamada).try/except
ou bloqueios podem ser usados para evitar a condição de corrida.Você pode fazer
mas acima precisa procurar 6 na lista a 2 vezes, então tente exceto seria mais rápido
fonte
Considerar:
Para remover todas as ocorrências, você pode usar a função de filtro em python. Por exemplo, seria semelhante a:
Então, manteria todos os elementos de
a != 2
.Para retirar apenas um dos itens, use
fonte
filter()
outrolist()
? De acordo com o manual, ele já retorna uma lista.Veja como fazê-lo no local (sem compreensão da lista):
fonte
O(n*n)
desnecessária (compare 1e6 e 1e12 - você não quer arriscar o último).while 1: L.remove(value)
e o retornoValueError
pode funcionar bem com algumasvalue
ou pequenas listas no CPython.Se você souber qual valor excluir, eis uma maneira simples (de qualquer maneira, o mais simples que eu puder imaginar):
Você terá
[0, 0, 2, 3, 4]
fonte
while 1 in a:
como estrutura de loop?O(n^2)
que estaria uma compreensãoO(n)
.Outra possibilidade é usar um conjunto em vez de uma lista, se um conjunto for aplicável ao seu aplicativo.
IE, se seus dados não forem solicitados e não tiverem duplicatas,
está livre de erros.
Frequentemente, uma lista é apenas um contêiner útil para itens que não são realmente ordenados. Há perguntas perguntando como remover todas as ocorrências de um elemento de uma lista. Se você não quer bobagens em primeiro lugar, mais uma vez um conjunto é útil.
não altera my_set de cima.
fonte
Como afirmado por várias outras respostas,
list.remove()
funcionará, mas lance umValueError
se o item não estiver na lista. Com o python 3.4+, há uma abordagem interessante para lidar com isso, usando o gerenciador de contexto suprimir :fonte
Encontrar um valor em uma lista e excluir esse índice (se existir) é mais fácil usando o método de remoção da lista:
Se você fizer isso com frequência, poderá agrupá-lo em uma função:
fonte
Este exemplo é rápido e excluirá todas as instâncias de um valor da lista:
fonte
break
noexcept ValueError
.Em uma linha:
às vezes é útil.
Ainda mais fácil:
fonte
Se seus elementos forem distintos, uma simples diferença de conjunto será suficiente.
fonte
Também podemos usar .pop:
fonte
Sobrescreva a lista indexando tudo, exceto os elementos que você deseja remover
fonte
Com um loop for e uma condição:
E se você deseja remover alguns, mas não todos:
fonte
fonte
Digamos, por exemplo, queremos remover todos os 1s de x. É assim que eu diria:
Agora, este é um uso prático do meu método:
E este é o meu método em uma única linha:
Ambos produzem isso como uma saída:
Espero que isto ajude. PS, observe que isso foi escrito na versão 3.6.2, portanto, você pode precisar ajustá-lo para versões mais antigas.
fonte
Talvez suas soluções funcionem com ints, mas não funciona para mim com dicionários.
Por um lado, remove () não funcionou para mim. Mas talvez funcione com tipos básicos. Eu acho que o código abaixo também é a maneira de remover itens da lista de objetos.
Por outro lado, 'del' também não funcionou corretamente. No meu caso, usando python 3.6: quando tento excluir um elemento de uma lista em um comando 'for' bucle com 'del', o python altera o índice no processo e o bucle para prematuramente antes do tempo. Só funciona se você excluir elemento por elemento em ordem inversa . Dessa forma, você não altera o índice da matriz de elementos pendentes quando está passando por ele
Então, eu sou usado:
onde 'list' é como [{'key1': value1 '}, {' key2 ': value2}, {' key3 ': value3}, ...]
Além disso, você pode fazer mais python usando enumerar:
fonte
fonte
Isso remove todas as instâncias da
"-v"
matrizsys.argv
e não reclama se nenhuma instância foi encontrada:Você pode ver o código em ação, em um arquivo chamado
speechToText.py
:fonte
esta é a minha resposta, basta usar enquanto e para
fonte