alle länder in einer liste löschen, die mit "land" enden

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.
Antworten
peterwoodbridge
User
Beiträge: 50
Registriert: Freitag 30. November 2012, 10:26

ich war einen Monat abwesend und scheine nun vieles vergessen zu haben, wie man programmiert:

zB sowas banales wie:

Code: Alles auswählen

some_countries = ["Deutschland", "Schweiz", "Österreich", "England"]
nun möchte ich Deutschland und England löschen, weil sie mit "land" enden...
wie muss ich da vorgehen?

gehts auch ohne for-schleife?

Code: Alles auswählen

for i in some_countries:
    if i.endswith("land"):
        some_countries.remove(i)
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Elemente aus einer Liste löschen, über die gerade iteriert wird, ist keine gute Idee. Dabei zerschießt man sich sehr gerne den Iterator, was dann natürlich zu interessanten Fehlern führt. Wenn es schlecht läuft, dann werden die falschen Elemente gelöscht.

Bei Python ist es daher üblich, einfach eine neue Liste zu erstellen. In diesem Fall bietet sich dazu eine List Comprehension an. Wenn du es ohne eine explizite Schleife haben willst, dann kannst du die filter-Funktion verwenden.
Das Leben ist wie ein Tennisball.
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

peterwoodbridge hat geschrieben:gehts auch ohne for-schleife?
Irgendeine Art von Schleife brauchst du, aber du könntest eine List Comprehension verwenden.

Code: Alles auswählen

some_countries = [country for country in some_countries if not country.endswith('land')]
Bei itertools sieht man die Schleife nicht direkt.

Code: Alles auswählen

from itertools import ifilterfalse
some_countries = list(ifilterfalse(lambda x: x.endswith('land'), some_countries))
Edit: @EyDu: Great minds think alike.
peterwoodbridge
User
Beiträge: 50
Registriert: Freitag 30. November 2012, 10:26

danke vielmals.
mich nervts, dass ich nach 4 wochen absenz nicht mehr im programmier-denken drin bin
Antworten