Seite 1 von 1

2d list: wie konvertiert man string nach float in a pythonic way

Verfasst: Dienstag 4. Oktober 2022, 13:04
von kkornfield
Hi
wie wurdet ihr das nach float bringen:
x= [["1" , "2", "3"],["4" , "5", "6"],["7" , "8.1", "9"]]
danke

Re: 2d list: wie konvertiert man string nach float in a pythonic way

Verfasst: Dienstag 4. Oktober 2022, 13:32
von __blackjack__
@kkornfield: Grundlagentutorial Schleifen oder „list comprehension“ und die `float()`-Funktion. Wenn man cool sein will, kann man noch `list()` und `map()` in den Mix werfen. Und falls man aus irgendwelchen Gründen sowieso schon das `glom`-Package als Abhängigkeit hat, dessen `glom()`-Funktion:

Code: Alles auswählen

In [631]: glom(xs, [[float]])
Out[631]: [[1.0, 2.0, 3.0], [4.0, 5.0, 6.0], [7.0, 8.1, 9.0]]

Re: 2d list: wie konvertiert man string nach float in a pythonic way

Verfasst: Dienstag 4. Oktober 2022, 13:39
von kbr
Und ohne glom hier auf die Schnelle:

Code: Alles auswählen

x = [["1" , "2", "3"],["4" , "5", "6"],["7" , "8.1", "9"]]

def get_float(items):
    for item in items:
        if isinstance(item, list):
            yield from get_float(item)
        else:
            yield float(item)
            
list(get_float(x))
Allerdings linearisiert das die Sequenz. Daran hatte ich – gleichfalls auf die Schnelle – nicht gedacht.

Re: 2d list: wie konvertiert man string nach float in a pythonic way

Verfasst: Dienstag 4. Oktober 2022, 13:49
von peterpy
oder einfach:

Code: Alles auswählen

ur_array= [["1" , "2", "3"],["4" , "5", "6"],["7" , "8.1", "9"]]

float_array = []
for liste in ur_array:
    neue_liste = []
    for element in liste:
        zahl = float(element)        
        neue_liste.append(zahl)
    float_array.append(neue_liste)
Gruss Peter

Re: 2d list: wie konvertiert man string nach float in a pythonic way

Verfasst: Dienstag 4. Oktober 2022, 13:59
von __blackjack__
Listen als `array` zu benennen ist keine gute Idee. Es gibt auch Arrays, damit sind aber in der Regel Numpy-Arrays gemeint wenn man über Python spricht. Grunddatentypen sollten auch nicht in Namen vorkommen. Und eigentlich ist das mit „list comprehensions“ ein kleiner Einzeiler. Mit `map()` und `list()` kann man sich dann sogar noch Namen einsparen.

Re: 2d list: wie konvertiert man string nach float in a pythonic way

Verfasst: Dienstag 4. Oktober 2022, 14:06
von kbr
... oder so:

Code: Alles auswählen

x = [["1" , "2", "3"],["4" , "5", "6"],["7" , "8.1", "9"]]
[[float(item) for item in items] for items in x]
Wobei ich nested list-comprehension nicht so mag, da diese schnell zur Unübersichtlichkeit neigen.

Re: 2d list: wie konvertiert man string nach float in a pythonic way

Verfasst: Dienstag 4. Oktober 2022, 14:14
von Sirius3
Ich würde sagen, das geht nicht, sagt jedenfalls mein Python:

Code: Alles auswählen

float([["1" , "2", "3"],["4" , "5", "6"],["7" , "8.1", "9"]])
TypeError: float() argument must be a string or a number, not 'list'

Re: 2d list: wie konvertiert man string nach float in a pythonic way

Verfasst: Dienstag 4. Oktober 2022, 14:16
von kbr
Die Idee mit list und map ist auch nicht schlecht, dann ist die LC nicht mehr nested ;)

Code: Alles auswählen

[list(map(float, items)) for items in x]
Aber keine Ahnung, ob es nun serialisiert, oder die Struktur beibehalten werden soll.