在Python中,如何将列表中的所有项转换为浮点数?

我有一个脚本,读取一个文本文件,拉出小数作为字符串,并将它们放入一个列表。

所以我列出了这个清单:

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

如何将列表中的每个值从字符串转换为浮点数?

我试过:

for item in my_list:
float(item)

但这似乎对我不起作用。

1012465 次浏览
[float(i) for i in lst]

准确地说,它创建了一个带有浮点值的新列表。与map方法不同,它将在py3k中工作。

map(float, mylist)应该做到这一点。

(在Python 3中,map不再返回一个列表对象,所以如果你想要一个新的列表,而不仅仅是要迭代的东西,你要么需要list(map(float, mylist) -要么使用SilentGhost的答案,这可以说是更Python化的。)

float(item)做正确的事情:它将其实参转换为float并返回它,但它不就地更改实参。一个简单的修复代码是:

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

同样的代码可以使用列表推导式写得更短:new_list = [float(i) for i in list]

就地更改列表:

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

顺便说一句,避免为变量使用list,因为它伪装成具有相同名称的内置函数。

可以使用numpy将列表直接转换为浮动数组或矩阵。

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

如果要将整数数组转换为浮动数组,则添加0。它

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

换做是我就会这么做。

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

它将类型显示为字符串列表。你可以使用numpy将这个列表同时转换为一个浮点数数组:

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


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

这将是另一个方法(不使用任何循环!):

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

我已经解决了这个问题在我的程序使用:

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

你甚至可以通过numpy来做到这一点

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

这个返回你的列表的np数组为float

你也可以将'dtype'设置为int

我必须首先从float字符串列表中提取数字:

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

然后每个转换为浮点数:

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

最后将所有浮点数赋值给一个dataframe为float64:

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

你可以使用numpy来避免循环:

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

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

float_list = map(float, list)
newlist = list(map(float, mylist))