Seite 1 von 1
Liste durchgehen, Strings entfernen, nur Zahlen in eine neue Liste
Verfasst: Donnerstag 27. April 2023, 11:54
von Dvdscot
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.
Re: Liste durchgehen, Strings entfernen, nur Zahlen in eine neue Liste
Verfasst: Donnerstag 27. April 2023, 12:05
von __deets__
Na dann Spar dir die ganze range-rödelei, und schreib
Re: Liste durchgehen, Strings entfernen, nur Zahlen in eine neue Liste
Verfasst: Donnerstag 27. April 2023, 12:10
von Dvdscot
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.
Re: Liste durchgehen, Strings entfernen, nur Zahlen in eine neue Liste
Verfasst: Donnerstag 27. April 2023, 12:25
von Sirius3
@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)
Re: Liste durchgehen, Strings entfernen, nur Zahlen in eine neue Liste
Verfasst: Donnerstag 27. April 2023, 15:32
von __blackjack__
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()