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

时间:2009-10-23 15:33:01

标签: python

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

所以我有这个清单:

  

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

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

我试过了:

for item in list:
    float(item)

但这似乎对我不起作用。

12 个答案:

答案 0 :(得分:346)

[float(i) for i in lst]

准确地说,它创建了一个包含浮点值的新列表。与map方法不同,它可以在py3k中使用。

答案 1 :(得分:100)

map(float, mylist)应该这样做。

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

答案 2 :(得分:14)

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)

BTW,避免对变量使用list,因为它伪装了同名的内置函数。

答案 3 :(得分:9)

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

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

答案 4 :(得分:3)

您可以使用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

答案 5 :(得分:2)

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

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

此列表将np数组返回为float

您还可以将'dtype'设置为int

答案 6 :(得分:1)

我就是这样做的。

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

答案 7 :(得分:1)

您可以使用numpy避免循环:

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

答案 8 :(得分: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'>

将类型显示为字符串列表。您可以使用numpy将此列表同时转换为浮点数组:

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

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

答案 9 :(得分:0)

我已经在程序中使用以下方法解决了这个问题:

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

答案 10 :(得分:0)

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

   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]])

最后,将所有浮点数分配给数据帧为float64:

   df4['fscore'] = np.array(ad,dtype=float)

答案 11 :(得分:0)

for i in range(len(list)): list[i]=float(list[i])