Ich möchte etwas schreiben, das ein bestimmtes Element aus einem Array entfernt. Ich weiß, dass ich for
das Array durchlaufen muss, um das Element zu finden, das dem Inhalt entspricht.
Angenommen, ich habe eine Reihe von E-Mails und möchte das Element entfernen, das mit einer E-Mail-Zeichenfolge übereinstimmt.
Ich möchte eigentlich die for-Schleifenstruktur verwenden, da ich denselben Index auch für andere Arrays verwenden muss.
Hier ist der Code, den ich habe:
for index, item in emails:
if emails[index] == '[email protected]':
emails.pop(index)
otherarray.pop(index)
list.remove(x)
?Antworten:
Sie müssen das Array nicht iterieren. Gerade:
Dadurch wird das erste Vorkommen entfernt, das mit der Zeichenfolge übereinstimmt.
BEARBEITEN: Nach Ihrer Bearbeitung müssen Sie immer noch nicht wiederholen. Mach einfach:
quelle
Die Verwendung von
filter()
undlambda
würde eine saubere und knappe Methode zum Entfernen unerwünschter Werte bieten:E-Mails werden dadurch nicht geändert. Es wird die neue Liste newEmails erstellt, die nur Elemente enthält, für die die anonyme Funktion True zurückgegeben hat.
quelle
Ihre for-Schleife ist nicht richtig, wenn Sie den Index in der for-Schleife benötigen:
In Ihrem Fall ist die Bogdan-Lösung in Ordnung, aber Ihre Datenstrukturauswahl ist nicht so gut. Es ist umständlich, diese beiden Listen mit Daten von einer zu Daten von der anderen im selben Index zu führen.
Eine Liste von Tupple (E-Mail, andere Daten) ist möglicherweise besser oder ein Diktat mit E-Mail als Schlüssel.
quelle
Der vernünftige Weg, dies zu tun, besteht darin,
zip()
einen Listenverständnis- / Generatorausdruck zu verwenden:Wenn Sie
array.array()
oder nicht verwendennumpy.array()
, verwenden Sie höchstwahrscheinlich[]
oderlist()
, das Ihnen Listen gibt, keine Arrays. Nicht dasselbe.quelle
Es gibt eine alternative Lösung für dieses Problem, die sich auch mit doppelten Übereinstimmungen befasst.
Wir beginnen mit 2 gleich langen Listen:
emails
,otherarray
. Ziel ist es, Elemente aus beiden Listen für jeden Index zu entfernen,i
in dememails[i] == '[email protected]'
.Dies kann erreicht werden, indem ein Listenverständnis verwendet und dann aufgeteilt wird über
zip
:quelle