None in Liste ersetzen.

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
Knollo
User
Beiträge: 63
Registriert: Mittwoch 10. Juni 2020, 14:44

Guten Morgen, ich versuche None in einer Liste zu ersetzten:

Code: Alles auswählen

>>> resultList = ['9.8', '7.8', '8.4', None]
>>> ['None' if v is None else v for v in resultList]
['9.8', '7.8', '8.4', 'None']
im Interpreter ausgeführt funzt perfekt.

Code: Alles auswählen

def main():
    resultList = ['9.8', '7.8', '8.4', None]
    ['None' if v is None else v for v in resultList]
    print(resultList)
if __name__ == '__main__':
    main()
als Script ausgeführt erzeugt:

Code: Alles auswählen

['9.8', '7.8', '8.4', None]
Wo liegt der Fehler, was mach ich falsch?

Danke - Stefan
Benutzeravatar
sparrow
User
Beiträge: 4591
Registriert: Freitag 17. April 2009, 10:28

Wo denkst du, änderst du resultList?
Knollo
User
Beiträge: 63
Registriert: Mittwoch 10. Juni 2020, 14:44

Die leeren Elemente (None) sollen mit dem String 'None' gefüllt werden. Ich hätte erwartet das

Code: Alles auswählen

['None' if v is None else v for v in resultList]
im Script das gleiche Ergebniss bringt wie im Terminal. Oder hab ich da was verpasst?
Sirius3
User
Beiträge: 18329
Registriert: Sonntag 21. Oktober 2012, 17:20

@Knollo: Du erzeugst eine neue Liste und schmeißt die dann gleich wieder weg. In der Interaktiven Shell wird das Ergebnis des Ausdrucks automatisch ausgegeben, in einem Programm nicht.
Variablennamen schreibt man komplett klein, Datentypen haben in Namen nichts verloren. Leerzeilen erhöhen die Lesbarkeit.

Code: Alles auswählen

def main():
    results = ['9.8', '7.8', '8.4', None]
    results = ['None' if value is None else value for value in results]
    print(results)

if __name__ == "__main__":
    main()
Knollo
User
Beiträge: 63
Registriert: Mittwoch 10. Juni 2020, 14:44

Ups, danke - jetzt passt es. Das mit dem "wegschmeißen" hatte ich leider glattweg übersehen :-(
Benutzeravatar
__blackjack__
User
Beiträge: 14237
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Alternativ, falls alles andere ausser `None` Zeichenketten sind:

Code: Alles auswählen

In [119]: list(map(str, ['9.8', '7.8', '8.4', None]))
Out[119]: ['9.8', '7.8', '8.4', 'None']
“Ich bin für die Todesstrafe. Wer schreckliche Dinge getan hat, muss eine angemessene Strafe bekommen. So lernt er seine Lektion für das nächste Mal.” — Britney Spears, Interview in der französischen Zeitung Libération, 2. April 2002
Antworten