Liste Problem

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
Good1
User
Beiträge: 5
Registriert: Mittwoch 6. Januar 2021, 14:42

L=['Meier','Bauer','Moritz', 'Manuel','Brecht']
sf=[ ]
for e in L:
if e==('M'):
sf=[e]+sf
print(sf)

Meine Frage war es in mir jemand erklären könnte wie sf=[e]+sf genau funktioniert. Das Programm habe ich schon vor längerem geschrieben und jetzt komm ich durcheinander und versteh selbst nicht wie ich drauf gekommen bin. Zweck des Programms ist es alle Namen mit M auszusortieren und zu Printen.
Benutzeravatar
noisefloor
User
Beiträge: 4191
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

du fügst damit der Liste `sf` eine 1-elementige Liste mit dem Element `e` hinzu. Macht man so aber nicht, zum Hinzufügen von Elementen zu einer Liste gibt es die `append` Methode von Listen.

Sonst noch: `if e==('M')` evaluiert hier nie zu `True`, weil in `L` kein Element `M` ist. Wenn du auf den Anfangsbuchstaben von `e` prüfen willst, dann geht das so nicht. Sprich: das Programm macht nicht das, was du willst.

Und die Variablennamen sind wirklich schlecht, weil völlig nichtssagend. Es kostet nichts, aussagekräftige Variablennamen zu nehmen - erhöht aber die Lesbarkeit des Codes.

Gruß, noisefloor
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

@noisefloor: ein Unterschied ist, dass append am Ende anhängt, hier aber ein Element an erster Stelle eingefügt wird.
@Good1: das ist sehr ineffizient, weil die ganze Liste kopiert werden muß.
Wenn man testen will, ob ein String mit einem M anfängt, benutzt man str.startswith.
Variablennamen werden komplett klein geschrieben und sollten aussagekräftig sein.

Code: Alles auswählen

names = ['Meier', 'Bauer', 'Moritz', 'Manuel', 'Brecht']
filtered_names = [name for name in names if name.startswith('M')]
Antworten