Liste durchgehen, Strings entfernen, nur Zahlen in eine neue Liste

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
Dvdscot
User
Beiträge: 10
Registriert: Donnerstag 27. April 2023, 11:46

Hallo,

ich mache gerade eine Python Weiterbildung und stecke gerade bei dieser Frage fest:

Char_Liste = ['bla', 'blu', 20, 30, 40]

Am Ende soll sie so aussehen:

Num_Liste = [20, 30, 40]

Folgenden Code hab ich geschrieben:

Code: Alles auswählen

Num_Liste = []
for entry in range(len(Char_Liste)):
	if type(entry) != str:
		Num_Liste.append(entry)
print(Num_Liste)
Da kommt aber [0, 1, 2, 3, 4] bei raus, er nimmt also die indexe anstatt den Inhalt und leider auch alle und nicht nur die drei der Zahlen. Vielen Dank.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na dann Spar dir die ganze range-rödelei, und schreib

Code: Alles auswählen

for ding in dinge:
Dvdscot
User
Beiträge: 10
Registriert: Donnerstag 27. April 2023, 11:46

Krass, danke, die Lösung ist mal wieder viel einfacher als gedacht.

for entry in Char_Liste

Heißt der eigentliche Code darunter ist richtig. Dabei finde ich dieses Range(len) eine prima Sache, denn in den anderen Sprachen hieß es immer for x = 1 to 5 und hier ist das anders, klar, ich hab damit for x in [0, 1, 2, ..., y] gemacht und daher hat er das genommen statt den eigentlichen Inhalt, ziemlich clever in Python.
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

@Dvdscot: gewöhn Dir gleich ein paar Dinge an: Eingerückt wird immer mit 4 Leerzeichen pro Ebene, keine Tabs.
Variablennamen werden komplett klein geschrieben, enthalten keine Abkürzungen und auch kein Typen.
Über einen Index iteriert man nicht, weil man damit zu viele Fehlerquellen hat und der Code schwieriger zu lesen ist.
Typvergleiche macht man mit ›isinstance‹, man sollte aber eigentlich erst gar nicht in eine Situation kommen, wo das nötig ist. Wie kommt denn die Liste Char_Liste zustande? An der Stelle mußt Du ansetzen, damit man erst gar nicht erst die Werte wieder auseinandernehmen braucht.

Code: Alles auswählen

items = ['bla', 'blu', 20, 30, 40]
numbers = []
for item in items:
    if not isinstance(item, str):
        numbers.append(item)
Benutzeravatar
__blackjack__
User
Beiträge: 14053
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ich würde den Typtest noch umkehren, das nicht auf nicht-Zeichenketten, sondern auf Zahlen getestet wird. Entweder auf ganze Zahlen, falls das Beispiel möglichst eng gefasst werden soll, oder auf `numbers.Number` falls man es möglichst weit fassen möchte.

Und noch „pythonischer“ wäre hier eine „list comprehension“ um die neue Liste zu erstellen.

Code: Alles auswählen

#!/usr/bin/env python3
from decimal import Decimal
from fractions import Fraction
from numbers import Number


def main():
    items = [
        "bla",
        42,
        3.14,
        1+2j,
        Decimal("0.1"),
        Fraction(23, 4711),
    ]
    
    numbers = [item for item in items if isinstance(item, Number)]
    print(numbers)


if __name__ == "__main__":
    main()
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten