Je veux écrire quelque chose qui supprime un élément spécifique d'un tableau. Je sais que je dois for
parcourir le tableau pour trouver l'élément qui correspond au contenu.
Disons que j'ai un tableau d'e-mails et que je veux me débarrasser de l'élément qui correspond à une chaîne d'e-mail.
En fait, j'aimerais utiliser la structure de la boucle for car je dois également utiliser le même index pour d'autres tableaux.
Voici le code que j'ai:
for index, item in emails:
if emails[index] == '[email protected]':
emails.pop(index)
otherarray.pop(index)
list.remove(x)
?Réponses:
Vous n'avez pas besoin d'itérer le tableau. Juste:
Cela supprimera la première occurrence qui correspond à la chaîne.
EDIT: Après votre modification, vous n'avez toujours pas besoin de répéter. Faites simplement:
la source
Utiliser
filter()
etlambda
fournirait une méthode claire et concise pour supprimer les valeurs indésirables:Cela ne modifie pas les e-mails. Il crée la nouvelle liste newEmails contenant uniquement les éléments pour lesquels la fonction anonyme a renvoyé True.
la source
Votre boucle for n'est pas correcte, si vous avez besoin de l'index dans la boucle for, utilisez:
Dans votre cas, la solution Bogdan est correcte, mais votre choix de structure de données n'est pas si bon. Il est maladroit de devoir maintenir ces deux listes avec des données de l'une liées à des données de l'autre au même index.
Une liste de tupple (e-mail, autres données) peut être meilleure, ou un dict avec e-mail comme clé.
la source
La bonne façon de faire est d'utiliser
zip()
et une expression de compréhension de liste / générateur:Aussi, si vous n'utilisez pas
array.array()
ounumpy.array()
, alors vous utilisez probablement[]
oulist()
, qui vous donne des listes, pas des tableaux. Pas la même chose.la source
Il existe une solution alternative à ce problème qui traite également des correspondances en double.
Nous commençons avec 2 listes de longueur égale:
emails
,otherarray
. L'objectif est de supprimer des éléments des deux listes pour chaque indexi
oùemails[i] == '[email protected]'
.Ceci peut être réalisé en utilisant une compréhension de liste puis en le fractionnant via
zip
:la source