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: 13080
- 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]]
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
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: 13080
- 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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
... 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]