Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
wie kann ich das letzte Vorkommen eines Elements in einer Liste entfernen? Ich suche für mein Programm so etwas wie "a.remove(b)", allerdings sollte es nicht das erste Vorkommen von "a" entfernen, sondern das letzte. Ich bisher noch nichts im Internet gefunden und mir fällt auch selber keine Lösung ein.
@Olivia: wenn Du ein Problem nicht lösen kannst, dann mußt Du es in mehrere Teilprobleme aufteilen. Mal als Ansatz: suche den Index des letzten Elements und lösche anschließend das Element mit diesem Index.
Wobei des Löschen von Elementen einer Liste generell nicht empfehlenswert ist. Die Liste muss dann möglicherweise intern neu strukturiert werden und dies wirkt sich negativ auf die Laufzeit aus. Das Löschen des letzten Elements ist ein Sonderfall, der meistens dann vorkommt, wenn man eine Liste als Stack nutzt. Die übliche Operation zum Abwerfen des letzten (d.h. am weitesten oben liegenden) Elements lautet dann `stack.pop()`. Hat letztlich den gleichen Effekt wie ``del stack[-1]``, ist aber IMHO eleganter.
@snafu: Naja, es hat nicht ganz den gleichen Effekt: `pop()` gibt das Element zurück (kann auch mit einem Index aufgerufen werden!) und ``del`` entfernt es nur.
Wenn es nicht so sehr auf die Laufzeit - und ggf. den Speicher - ankommt, dann kann man auch ganz primitiv vorgehen: Liste umdrehen, aus der umgedrehten Liste das erste passende Element entfernen und die Liste wieder zurückdrehen.
@/me: Ich denke von der Laufzeit könnte das wahrscheinlich sogar schneller sein, ausser die Liste ist sehr gross. Also zumindest in CPython. Wieso Speicher? Umdrehen der Liste sollte ohne zusätzlichen Speicher auskommen, das kann man ja ”in place” machen.
Hier trotzdem mal ein Ansatz ohne die Liste umzudrehen (`reversed()` dreht die Liste nicht um sondern liefert einen Iterator der die Liste von hinten durchgeht) (ungetestet):
Gerade der letzte scheint vielversprechend zu sein, ich muss aber wahrscheinlich noch etwas rumprobieren bis ich ihn einsetzen kann, vorallem weil ich noch ein ziemlicher Anfänger bin und noch nicht den gesamten Code verstehe. Aber trotzdem danke