Hallo,
ich würde gerne aus einer Liste die aus Tupels besteht z.B. [("Marmelade", "rot", ...]] bestimmte Einträge löschen. Diese Einträge sind in einer Liste mit Zahlen z.B. ["1", "2", ..] , die die Position der Tupels, die entfernt werden sollen festgehalten.
Ich habe schon vieles probiert, wie zum Beispiel liste.pop(int(auswahl), allerdings werden höchstens zwei richtige Einträge entfernt.
Vielen Dank im Vorhinein für Ihre Hilfe.
Listeneinträge aus einer anderen Liste entfernen
Warum sind die Zahlen Strings?
Was hast Du versucht? Zeige den Code dazu? Was ist das Ergebnis und wie weicht das vom erwarteten Ergebnis ab?
Statt Elemente aus einer Liste zu Löschen erzeugt man in Python normalerweise eine neue Liste, die die zu löschenden Elemente einfach nicht mehr enthält.
Was hast Du versucht? Zeige den Code dazu? Was ist das Ergebnis und wie weicht das vom erwarteten Ergebnis ab?
Statt Elemente aus einer Liste zu Löschen erzeugt man in Python normalerweise eine neue Liste, die die zu löschenden Elemente einfach nicht mehr enthält.
Klar, denn nach dem Entfernen von Elementen verschieben sich ja die Positionen der Nachfolger entsprechend nach vorne und somit passt die erwartete Zuordnung nicht mehr.
Es ist besser, stattdessen mit enumerate() zu arbeiten:
Code: Alles auswählen
items = [("Marmelade", "rot"), ("Käse", "gelb"), ("Gurke", "grün")]
ignore_indices = [1, 2]
result = [item for (i, item) in enumerate(items) if i not in ignore_indices]
print(result)
- DeaD_EyE
- User
- Beiträge: 1021
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
Anmerkung: Mir ist aufgefallen, dass sich die Anfänger auf Pandas stürzen, Magie anwenden, aber nicht wissen wie man das dann mit Python macht. Spätestens wenn man mit "dreckigen" Daten arbeiten will, ist die Logik von Pandas ganz angenehm, vor allem wenn es um das Parsen von csv geht. Mit dem csv-modul muss man viel zu Fuß machen.
Als Generator:
Code: Alles auswählen
def ignore(sequence, *ignored):
for idx, element in enumerate(sequence):
if idx not in ignored:
yield element
items = [("Marmelade", "rot"), ("Käse", "gelb"), ("Gurke", "grün")]
ergebnis = list(ignore(items, 0, 1))
Code: Alles auswählen
import operator
items = [("Marmelade", "rot"), ("Käse", "gelb"), ("Gurke", "grün")]
getter = operator.itemgetter(0, 2) # holt sich die indicies 0 und 2
ergebnis = getter(items)
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server