Eu quero escrever algo que remove um elemento específico de uma matriz. Eu sei que tenho que for
percorrer a matriz para encontrar o elemento que corresponde ao conteúdo.
Digamos que eu tenho uma matriz de emails e quero me livrar do elemento que corresponde a uma sequência de emails.
Na verdade, eu gostaria de usar a estrutura de loop for porque também preciso usar o mesmo índice para outras matrizes.
Aqui está o código que eu tenho:
for index, item in emails:
if emails[index] == '[email protected]':
emails.pop(index)
otherarray.pop(index)
list.remove(x)
?Respostas:
Você não precisa iterar a matriz. Somente:
Isso removerá a primeira ocorrência que corresponde à sequência.
EDIT: Após a sua edição, você ainda não precisa repetir. Apenas faça:
fonte
Usar
filter()
elambda
forneceria um método claro e conciso para remover valores indesejados:Isso não modifica e-mails. Ele cria a nova lista newEmails contendo apenas elementos para os quais a função anônima retornou True.
fonte
Seu loop for não está correto, se você precisar do índice no uso do loop for:
No seu caso, a solução Bogdan é boa, mas sua escolha de estrutura de dados não é tão boa. Ter que manter essas duas listas com dados de um relacionado a dados do outro no mesmo índice é desajeitado.
Uma lista de tupple (email, outros dados) pode ser melhor ou um ditado com email como chave.
fonte
A maneira sensata de fazer isso é usar
zip()
uma Expressão de Compreensão / Gerador de Lista:Além disso, se your'e não usar
array.array()
ounumpy.array()
, então provavelmente você está usando[]
oulist()
, o que dará listas, não Arrays. Não é a mesma coisa.fonte
Existe uma solução alternativa para esse problema que também lida com correspondências duplicadas.
Começamos com 2 listas de igual comprimento:
emails
,otherarray
. O objetivo é remover itens de ambas as listas para cada índice emi
queemails[i] == '[email protected]'
.Isso pode ser conseguido usando uma compreensão de lista e depois dividindo-se através de
zip
:fonte