Hi
wie wurdet ihr das nach float bringen:
x= [["1" , "2", "3"],["4" , "5", "6"],["7" , "8.1", "9"]]
danke
2d list: wie konvertiert man string nach float in a pythonic way
- __blackjack__
- User
- Beiträge: 13004
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@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]]
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Und ohne glom hier auf die Schnelle:
Allerdings linearisiert das die Sequenz. Daran hatte ich – gleichfalls auf die Schnelle – nicht gedacht.
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))
oder einfach:
Gruss Peter
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)
- __blackjack__
- User
- Beiträge: 13004
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
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.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
... oder so:
Wobei ich nested list-comprehension nicht so mag, da diese schnell zur Unübersichtlichkeit neigen.
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]
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'
Die Idee mit list und map ist auch nicht schlecht, dann ist die LC nicht mehr nested
Aber keine Ahnung, ob es nun serialisiert, oder die Struktur beibehalten werden soll.
Code: Alles auswählen
[list(map(float, items)) for items in x]