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


246

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

所以我有这个清单:

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

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

我努力了:

for item in list:
    float(item)

但这似乎对我不起作用。


60
不要将list用作变量名。
Tim Pietzcker,2009年

4
要详细说明上述评论:使用list变量名称将使内置list构造函数不正确,从而不允许您在同一范围内使用它
Lasse Halberg Haarbye19年

Answers:


452
[float(i) for i in lst]

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


7
对于大阵的,我会建议使用numpy的: np.array(inp_list, dtype=np.float32)。您甚至不必指定它是否是浮点数,而只需使用:np.array(inp_list)
Thomas Devoogdt,

2
@Thomas Devoogdt:我认为您确实需要指定类型,否则您将得到一小串字符串
seb007

2
请注意,您必须分配[float(i) for i in lst]某些内容。例如:new_list = [float(i) for i in lst]
FaizFizy

126

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

(在Python 3中,map不再返回列表对象,因此,如果您想要一个新列表而不只是要迭代的内容,则需要list(map(float, mylist)-或使用SilentGhost的答案(可以说是更Python的)。)


这其实是3.设计次优的Python
xuancong84

15

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用于变量,因为它会伪装具有相同名称的内置函数。


抱歉,我在这里没有明白什么意思。它与先前的pythonic答案有何不同?先前答案“ [第一个i的float(i)]”中的转换是否保留了原始列表索引
AAI,

1
@AAI更改原始列表,然后创建一个新列表。
Denis Otkidach '18

13

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

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

如果您想将其保留为np.array =,则无需再次将np.array转换为列表。–
alvas

8

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

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

返回列表的np数组为float

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


1
但是随后您将返回一个numpy数组,而不是一个列表。
user650261

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

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

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

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)

0

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

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

1
OP指出他正在从文本文件中读取。此答案不适用于所要求的内容。
Ilhicas

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.