Ik heb een script dat een tekstbestand leest, decimale getallen eruit haalt als strings en ze in een lijst plaatst.
Dus ik heb deze lijst:
['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']
Hoe converteer ik elk van de waarden in de lijst van een string naar een float?
Ik heb geprobeerd:
for item in list:
float(item)
Maar dit lijkt niet te werken voor mij.
Antwoord 1, autoriteit 100%
[float(i) for i in lst]
om precies te zijn, het creëert een nieuwe lijst met float-waarden. In tegenstelling tot de map
-aanpak werkt het in py3k.
Antwoord 2, autoriteit 28%
map(float, mylist)
zou het moeten doen.
(In Python 3 geeft map geen lijstobject meer terug, dus als je een nieuwe lijst wilt en niet alleen iets om over te herhalen, heb je ofwel list(map(float, mylist)
nodig – of gebruik het antwoord van SilentGhost, dat aantoonbaar meer pythonisch is.)
Antwoord 3, autoriteit 4%
Dit zou een andere methode zijn (zonder een lus te gebruiken!):
import numpy as np
list(np.float_(list_name))
Antwoord 4, autoriteit 3%
float(item)
doet het juiste: het converteert zijn argument naar float en retourneert het, maar het verandert het argument niet op zijn plaats. Een eenvoudige oplossing voor uw code is:
new_list = []
for item in list:
new_list.append(float(item))
Dezelfde code kan geschreven korter behulp lijstcomprehensie: new_list = [float(i) for i in list]
Om lijst te wijzigen in-place:
for index, item in enumerate(list):
list[index] = float(item)
Tussen haakjes, vermijd het gebruik van list
voor uw variabelen, omdat het zich voordoet ingebouwde functie met dezelfde naam.
Antwoord 5, Autoriteit 2%
U kunt zelfs dit doen door numpy
import numpy as np
np.array(your_list,dtype=float)
deze terugkeer np reeks van de lijst als float
u kunt ook instellen ‘dtype’ als int
Antwoord 6
U kunt gebruik maken van numpy om een lijst rechtstreeks naar een drijvende matrix of te converteren.
import numpy as np
list_ex = [1, 0] # This a list
list_int = np.array(list_ex) # This is a numpy integer array
Als u wilt de integer-array om te zetten in een zwevende-array en voeg dan 0. te
list_float = np.array(list_ex) + 0. # This is a numpy floating array
Antwoord 7
U kunt de map()
functie gebruiken om de lijst direct naar floats
float_list = map(float, list)
Antwoord 8
u kunt gebruiken numpy te vermijden looping:
import numpy as np
list(np.array(my_list).astype(float)
Antwoord 9
Dit is hoe ik het zou doen.
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'>
Antwoord 10
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'>
die het type weergeeft als een lijst met tekenreeksen. Je kunt deze lijst tegelijkertijd converteren naar een array van floats met numpy:
my_list = np.array(my_list).astype(np.float)
print(type(my_list), type(my_list[0]))
# <class 'numpy.ndarray'> <class 'numpy.float64'>
Antwoord 11
Ik moest eerst getallen uit een lijst met float-strings halen:
df4['sscore'] = df4['simscore'].str.findall('\d+\.\d+')
vervolgens converteren naar een float:
ad=[]
for z in range(len(df4)):
ad.append([float(i) for i in df4['sscore'][z]])
wijs uiteindelijk alle floats toe aan een dataframe als float64:
df4['fscore'] = np.array(ad,dtype=float)
Antwoord 12
Ik heb dit probleem in mijn programma opgelost met:
number_input = float("{:.1f}".format(float(input())))
list.append(number_input)
Antwoord 13
for i in range(len(list)): list[i]=float(list[i])