将String格式的列表转换回浮点数列表

时间:2016-02-08 15:50:34

标签: python regex django python-3.x

str = [  3.82133931e-01   4.27354313e-02   1.94678816e-03   0.00000000e+00
   0.00000000e+00   0.00000000e+00   0.00000000e+00   0.00000000e+00
   0.00000000e+00   0.00000000e+00   0.00000000e+00   0.00000000e+00
   0.00000000e+00   3.61185198e-06   1.26606241e-01   1.18472360e-01]

上面的字符串已经从数据库文本字段中检索到了,我试图将其转换回浮动列表,但无论我尝试什么,我似乎都无法摆脱方括号

floatList = []

for k, v in enumerate(str.split('   ')):
    if re.search(r'\d', v):
        item = re.sub(r'\D\S', '', v).rstrip()
        item = re.sub(r'\[.*?\]/g', '', item)
        floatList.append(float(item))

我试过了:

item.replace('[', '')
item.replace(']', '')

以及Ascii代码。

始终错误 ValueError:无法将字符串转换为浮动:' [536444501'

3 个答案:

答案 0 :(得分:3)

您似乎应该能够剥离[]

str = str.replace('[', '').replace(']', '')

然后在分割字符串的每个成员上拆分调用float的字符串:

floats = [float(x) for x in str.split()]

请注意,因为python字符串是 immutable ,所以类似:

str.replace('[', '')

不会更改str。而是返回一个 new 字符串,其中删除了请求的字符。由于返回一个新字符串,我们需要给该字符串一个名称(我只是选择给它命名为str 1 以避免使用太多名...)

1 请注意,str也不是变量的好名称,因为它会影响内置str 类型。我强烈建议选择一个不同的名字: - )

答案 1 :(得分:1)

这个怎么样:

floats = [ float(x) for x in re.findall('\d+\.\d+e[+\-]\d\d', str)]

答案 2 :(得分:1)

您应该将数字存储在数据库中作为浮点数而不是字符串。

如果您正在使用postgres,则可以使用ArrayField

from django.contrib.postgres.fields import ArrayField
my_floats = ArrayField(models.FloatField())

如果你不是,你仍然应该将它们存储为数字,但它可能需要不同的关系模型。