Wie konvertiere ich in Python alle Elemente in einer Liste in Floats?

246

Ich habe ein Skript, das eine Textdatei liest, Dezimalzahlen als Zeichenfolgen herauszieht und sie in eine Liste einfügt.

Also habe ich diese Liste:

['0.49', '0.54', '0.54', '0.54', '0.54', '0.54', '0.55', '0.54', '0.54',  '0.54', 
 '0.55', '0.55', '0.55', '0.54', '0.55', '0.55', '0.54', '0.55', '0.55', '0.54']

Wie konvertiere ich jeden der Werte in der Liste von einem String in einen Float?

Ich habe versucht:

for item in list:
    float(item)

Aber das scheint bei mir nicht zu funktionieren.

Patrick Artner
quelle
60
Verwenden Sie list nicht als Variablennamen.
Tim Pietzcker
4
Um den obigen Kommentar näher zu erläutern: Wenn Sie ihn listals Variablennamen verwenden, wird der integrierte listKonstruktor beschattet, sodass Sie ihn nicht im selben Bereich verwenden können
Lasse Halberg Haarbye,

Antworten:

452
[float(i) for i in lst]

Um genau zu sein, wird eine neue Liste mit Gleitkommawerten erstellt. Im Gegensatz zum mapAnsatz funktioniert es in py3k.

SilentGhost
quelle
7
Für große Arrays würde ich die Verwendung von numpy empfehlen : np.array(inp_list, dtype=np.float32). Sie müssen nicht einmal angeben, ob es sich um einen Float handelt, und nur np.array(inp_list)
Folgendes
2
@ Thomas Devoogdt: Ich denke, Sie müssen den Typ angeben, sonst erhalten Sie eine Reihe von Zeichenfolgen
seb007
2
Bitte beachten Sie, dass Sie [float(i) for i in lst]etwas zuweisen müssen. ZB:new_list = [float(i) for i in lst]
FaizFizy
126

map(float, mylist) Sollte es tun.

(In Python 3 gibt map kein list(map(float, mylist)Listenobjekt mehr zurück. Wenn Sie also eine neue Liste und nicht nur etwas zum Durchlaufen wünschen , müssen Sie entweder die Antwort von SilentGhost verwenden - oder verwenden, die wohl pythonischer ist.)

Tim Pietzcker
quelle
Dies ist in der Tat eine Design-
Suboptimalität
15

float(item)Tun Sie das Richtige: Es konvertiert sein Argument in float und gibt es zurück, ändert aber das Argument nicht an Ort und Stelle. Eine einfache Lösung für Ihren Code ist:

new_list = []
for item in list:
    new_list.append(float(item))

Der gleiche Code kann mit Listenverständnis kürzer geschrieben werden: new_list = [float(i) for i in list]

So ändern Sie die Liste an Ort und Stelle:

for index, item in enumerate(list):
    list[index] = float(item)

Übrigens, vermeiden Sie die Verwendung listfür Ihre Variablen, da diese die integrierte Funktion mit demselben Namen maskieren.

Denis Otkidach
quelle
Entschuldigung, ich habe nicht verstanden, was In-Place hier bedeutet. Wie unterscheidet es sich von der vorherigen pythonischen Antwort? Behält die Konvertierung in der vorherigen Antwort "[float (i) für i in lst]" nicht den ursprünglichen Listenindex bei
AAI
1
@AAI Ursprüngliche Liste ändern vs. neue erstellen.
Denis Otkidach
13

Dies wäre eine andere Methode (ohne Verwendung einer Schleife!):

import numpy as np
list(np.float_(list_name))
Amin Kiany
quelle
Sie müssen das np.array nicht erneut in die Liste aufnehmen, wenn Sie es als np.array behalten möchten =)
alvas
8

Sie können dies sogar durch Numpy tun

import numpy as np
np.array(your_list,dtype=float)

Dies gibt das np-Array Ihrer Liste als float zurück

Sie können 'dtype' auch als int festlegen

Alireza
quelle
1
Aber dann geben Sie ein numpy-Array zurück, keine Liste.
user650261
3

Mit numpy können Sie eine Liste direkt in ein schwebendes Array oder eine Matrix konvertieren.

    import numpy as np
    list_ex = [1, 0] # This a list
    list_int = np.array(list_ex) # This is a numpy integer array

Wenn Sie das Integer-Array in ein Floating-Array konvertieren möchten, fügen Sie 0 hinzu

    list_float = np.array(list_ex) + 0. # This is a numpy floating array
bfree67
quelle
1

So würde ich es machen.

my_list = ['0.49', '0.54', '0.54', '0.54', '0.54', '0.54', '0.55', '0.54', 
    '0.54', '0.54', '0.55', '0.55', '0.55', '0.54', '0.55', '0.55', '0.54', 
    '0.55', '0.55', '0.54']
print type(my_list[0]) # prints <type 'str'>
my_list = [float(i) for i in my_list]
print type(my_list[0]) # prints <type 'float'>
SammyRod
quelle
0
import numpy as np
my_list = ['0.49', '0.54', '0.54', '0.54', '0.54', '0.54', '0.55', '0.54', '0.54', '0.54', '0.55', '0.55', '0.55', '0.54', '0.55', '0.55', '0.54', 
'0.55', '0.55', '0.54']
print(type(my_list), type(my_list[0]))   
# <class 'list'> <class 'str'>

Hier wird der Typ als Liste von Zeichenfolgen angezeigt. Sie können diese Liste mit numpy gleichzeitig in ein Array von Floats konvertieren:

    my_list = np.array(my_list).astype(np.float)

    print(type(my_list), type(my_list[0]))  
    # <class 'numpy.ndarray'> <class 'numpy.float64'>
Barry O'Sullivan
quelle
0

Ich musste zuerst Zahlen aus einer Liste von Float-Strings extrahieren:

   df4['sscore'] = df4['simscore'].str.findall('\d+\.\d+')

dann jeweils in einen float umwandeln:

   ad=[]
   for z in range(len(df4)):
      ad.append([float(i) for i in df4['sscore'][z]])

Weisen Sie am Ende alle Floats einem Datenrahmen als float64 zu:

   df4['fscore'] = np.array(ad,dtype=float)
Max Kleiner
quelle
0

Ich habe dieses Problem in meinem Programm gelöst mit:

number_input = float("{:.1f}".format(float(input())))
list.append(number_input)
Gui
quelle
1
Das OP gibt an, dass er aus einer Textdatei liest. Diese Antwort gilt nicht für das, was gefragt wurde.
Ilhicas
0
for i in range(len(list)): list[i]=float(list[i])
user11545988
quelle