Python 将字符串格式的列表转换回浮点数列表

Python 将字符串格式的列表转换回浮点数列表,python,regex,django,python-3.x,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+

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

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))
和Ascii码


始终是错误值error:无法将字符串转换为float:“[536444501”

看起来您应该可以去掉[and]:

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

str = str.replace('[', '').replace(']', '')
请注意,由于python字符串是不可变的,因此:

floats = [float(x) for x in str.split()]
不会就地更改str。相反,它会返回一个新字符串并删除请求的字符。由于它返回一个新字符串,我们需要为该字符串指定一个名称。我只是选择再次为其指定名称str1,以避免使用太多名称

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

这样如何:

str.replace('[', '')

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

如果你使用postgres,你可以使用


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

str=实际上是字符串的一部分吗?@mgilson不,这只是我保存的变量,我正在使用sqlite,因为我只处理一个表。为了方便起见,我大大减小了数组的大小,这实际上是一个color图像的直方图。你能不能扩展一下什么关系模型才是实用的?@LukeVincent-过去我需要一个单独的数组表,它基本上只由一个带包装器的浮点字段和一个外键组成,然后返回到一个数组模型中,然后根据需要在我的模型中使用。关键是要尝试适应方形我想如果我这样做的话,我可能会改成一个Postgres数据库,我可能会这样做。无论如何,谢谢你的建议。工作了,谢谢,不过为了可读性,我会选择@mgilsons answer。你回答了问题并指出了我犯的错误正在将str.replace输出添加到一个新变量。@Sayse-这一点很好。我添加了一个脚注,解释了为什么str是变量的坏名称:-。
str.replace('[', '')
floats = [ float(x) for x in re.findall('\d+\.\d+e[+\-]\d\d', str)]
from django.contrib.postgres.fields import ArrayField
my_floats = ArrayField(models.FloatField())