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())