简体   繁体   中英

In Python, how do I convert all of the items in a list to floats?

I have a script which reads a text file, pulls decimal numbers out of it as strings and places them into a list.

So I have this list:

my_list = ['0.49', '0.54', '0.54', '0.55', '0.55', '0.54', '0.55', '0.55', '0.54']

How do I convert each of the values in the list from a string to a float?

I have tried:

for item in my_list:
    float(item)

But this doesn't seem to work for me.

[float(i) for i in lst]

to be precise, it creates a new list with float values. Unlike the map approach it will work in py3k.

map(float, mylist) should do it.

(In Python 3, map ceases to return a list object, so if you want a new list and not just something to iterate over, you either need list(map(float, mylist) - or use SilentGhost's answer which arguably is more pythonic.)

This would be an other method (without using any loop!):

import numpy as np
list(np.float_(list_name))

float(item) do the right thing: it converts its argument to float and and return it, but it doesn't change argument in-place. A simple fix for your code is:

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

The same code can written shorter using list comprehension: new_list = [float(i) for i in list]

To change list in-place:

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

BTW, avoid using list for your variables, since it masquerades built-in function with the same name.

you can even do this by numpy

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

this return np array of your list as float

you also can set 'dtype' as int

You can use numpy to convert a list directly to a floating array or matrix.

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

If you want to convert the integer array to a floating array then add 0. to it

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

您可以使用map()函数将列表直接转换为floats

float_list = map(float, list)

you can use numpy to avoid looping:

import numpy as np
list(np.array(my_list).astype(float)

This is how I would do it.

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'>
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'>

which displays the type as a list of strings. You can convert this list to an array of floats simultaneously using numpy:

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

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

I have solve this problem in my program using:

number_input = float("{:.1f}".format(float(input())))
list.append(number_input)

I had to extract numbers first from a list of float strings:

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

then each convert to a float:

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

in the end assign all floats to a dataframe as float64:

   df4['fscore'] = np.array(ad,dtype=float)
for i in range(len(list)): list[i]=float(list[i])

More than an answer, this shows that always the first one you find is not necessarily the best. Tim Pietzcker answer is the best and more efficient.

import time
from typing import Iterable

def timer(func, *args, reps=1000, **kwargs):
    start = time.perf_counter()
    for i in range(reps):
        ret = func(*args, **kwargs)
    lapse = time.perf_counter() - start
    return lapse, ret

def listComprehension(to, list2comp: Iterable):
    return list(to(i) for i in list2comp)

def mapping(to, list2map: Iterable):
    return list(map(to, list2map))

if __name__ == '__main__':
    list2convert = ['1', '2', '3', '4']
    
    for func in mapping, list_comp:
        lapse, ret = timer(func, float, list2convert)
        print(func.__name__ + ': \n\tlapse:' + str(lapse) + '\n\tret:' + str(ret))

Results:

mapping:
    lapse:0.005934100000000164
    ret:[1.0, 2.0, 3.0, 4.0]
list_comp:
    lapse:0.05731120000000001
    ret:[1.0, 2.0, 3.0, 4.0]

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM