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

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

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

我试过了:

for item in list:
    float(item)
Run Code Online (Sandbox Code Playgroud)

但这似乎对我不起作用.

Sil*_*ost 395

[float(i) for i in lst]
Run Code Online (Sandbox Code Playgroud)

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

  • 请注意,您必须将“[float(i) for i in lst]”分配给某些内容。例如:`new_list = [float(i) for i in lst]` (6认同)
  • 对于大型数组,我建议使用numpy:`np.array(inp_list,dtype = np.float32)`.你甚至不必指定它是否是一个浮点数而只是使用:`np.array(inp_list)` (5认同)
  • @Thomas Devoogdt:我认为你确实需要指定类型,否则你将得到一个 numpy 字符串数组 (2认同)

Tim*_*ker 116

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

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


Den*_*ach 14

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

new_list = []
for item in list:
    new_list.append(float(item))
Run Code Online (Sandbox Code Playgroud)

使用列表理解可以缩短相同的代码: new_list = [float(i) for i in list]

要就地更改列表:

for index, item in enumerate(list):
    list[index] = float(item)
Run Code Online (Sandbox Code Playgroud)

顺便说一句,避免使用list你的变量,因为它伪装了同名的内置函数.

  • @AAI 更改原始列表与创建新列表。 (2认同)

Ami*_*any 11

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

import numpy as np
list(np.float_(list_name))
Run Code Online (Sandbox Code Playgroud)

  • 如果您想将其保留为 np.array,则无需再次将 np.array 转换为列表 =) (2认同)

mna*_*d01 7

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

float_list = map(float, list)
Run Code Online (Sandbox Code Playgroud)


Ali*_*eza 6

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

import numpy as np
np.array(your_list,dtype=float)
Run Code Online (Sandbox Code Playgroud)

此列表返回np数组为float

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