5

我有一些 Python 代码可以从文本文件中提取字符串:

[2.467188005806714e-05, 0.18664554919828535, 0.5026880460053854, ....]

Python代码:

v = string[string.index('['):].split(',')
for elem in v:
    new_list.append(float(elem))

这给出了一个错误:

ValueError: could not convert string to float: [2.974717463860223e-06

为什么不能[2.974717463860223e-06转换为浮点数?

4

5 回答 5

16

你仍然有[你的“浮动”前面,它可以防止解析。

为什么不为此使用合适的模块呢?例如:

>>> a = "[2.467188005806714e-05, 0.18664554919828535, 0.5026880460053854]"
>>> import json
>>> b = json.loads(a)
>>> b
[2.467188005806714e-05, 0.18664554919828535, 0.5026880460053854]

或者

>>> import ast
>>> b = ast.literal_eval(a)
>>> b
[2.467188005806714e-05, 0.18664554919828535, 0.5026880460053854]
于 2012-04-16T14:51:58.403 回答
5

您可以执行以下操作将从文件中读取的字符串转换为浮点列表

>>> instr="[2.467188005806714e-05, 0.18664554919828535, 0.5026880460053854]"
>>> [float(e) for e in instr.strip("[] \n").split(",")]
[2.467188005806714e-05, 0.18664554919828535, 0.5026880460053854]

您的代码失败的原因是,您没有从字符串中删除“[”。

于 2012-04-16T14:52:41.793 回答
3

您正在捕获第一个括号,更改string.index("[")string.index("[") + 1

于 2012-04-16T14:50:41.320 回答
1

这将为您提供浮动列表,而无需额外的导入等。

s = '[2.467188005806714e-05, 0.18664554919828535, 0.5026880460053854]'
s = s[1:-1]
float_list = [float(n) for n in s.split(',')]


[2.467188005806714e-05, 0.18664554919828535, 0.5026880460053854]
于 2012-04-16T14:58:03.107 回答
0
v = string[string.index('[') + 1:].split(',')

index()返回给定字符的索引,因此它'['包含在返回的序列中[:]

于 2012-04-16T14:50:53.870 回答