Seite 1 von 1
alle länder in einer liste löschen, die mit "land" enden
Verfasst: Dienstag 14. Mai 2013, 13:06
von peterwoodbridge
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)
Re: alle länder in einer liste löschen, die mit "land" enden
Verfasst: Dienstag 14. Mai 2013, 13:13
von EyDu
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.
Re: alle länder in einer liste löschen, die mit "land" enden
Verfasst: Dienstag 14. Mai 2013, 13:16
von /me
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.
Re: alle länder in einer liste löschen, die mit "land" enden
Verfasst: Dienstag 14. Mai 2013, 13:20
von peterwoodbridge
danke vielmals.
mich nervts, dass ich nach 4 wochen absenz nicht mehr im programmier-denken drin bin