【问题标题】:Convert list in String format back to list of float numbers将字符串格式的列表转换回浮点数列表
【发布时间】:2023-03-25 23:21:01
【问题描述】:
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: could not convert string to float: '[ 536444501'

【问题讨论】:

  • str = 实际上是字符串的一部分吗?
  • @mgilson 不,这只是我持有的变量

标签: python regex django python-3.x


【解决方案1】:

看来你应该可以去掉[]

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

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

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

请注意,因为 python 字符串是不可变的,所以像:

str.replace('[', '')

不会原地更改str。相反,它返回一个 new 字符串,其中删除了请求的字符。因为它返回一个新的字符串,我们需要给这个字符串一个名字(我只是再次选择给它一个名字str1以避免使用太多的名字。 ..)

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

【讨论】:

  • 您回答了问题并指出了我没有将 str.replace 输出绑定到新变量时所犯的错误。
  • @Sayse -- 好点。我添加了一个脚注,解释了为什么 str 是变量的坏名称:-)。
【解决方案2】:

这个怎么样:

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

【讨论】:

  • 工作了,谢谢,虽然为了可读性我会用@mgilsons 回答
【解决方案3】:

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

如果您使用的是 postgres,则可以使用 ArrayField

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

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

【讨论】:

  • 我正在使用 sqlite,因为我只使用一个表。为了方便起见,我大大减小了数组的大小,这实际上是图像的颜色直方图。您能否扩展一下实用的关系模型?
  • @LukeVincent - 过去我需要一个单独的数组表,它基本上由一个带有包装器的浮点字段和一个返回数组模型的外键组成,然后在我的模型根据需要。关键是试图在圆孔中安装方钉总是会在某些时候引起问题
  • 我想如果我这样做的话,我还不如改用我可能会做的 Postgres 数据库。无论如何感谢您的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-26
  • 2017-09-17
  • 2013-08-11
  • 2019-10-31
  • 2019-03-31
相关资源
最近更新 更多