You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何优雅将含乘数的数值字符串转换为浮点数列表

字符串转带重复规则的浮点数列表实现

需求背景

需要将如下字符串转换为浮点数列表:

strng= "0.000000000000000E+000, 2*2.400000000000000E-002  , 97*0.000000000000000E+000  ,"

用strng.split(',')拆分后得到的初始结果为:

['  0.000000000000000E+000', ' 2*2.400000000000000E-002  ', ' 97*0.000000000000000E+000  ', '\n']

转换规则:

  • 空值、换行符直接过滤
  • 含*的元素:*前的数字为重复次数,*后的数值需要重复对应次数添加到列表
  • 不含*的元素:直接转换为浮点数添加到列表

原代码问题

你给出的初始代码存在几个问题:

  1. strng.split("=").split(',')语法错误,split返回列表,无法直接链式调用split
  2. 未处理元素首尾的空白字符
  3. 未过滤空元素和换行符
  4. 重复逻辑错误:int(i[0])*i[1]是字符串乘法,不会生成多个独立浮点数元素
  5. 未做浮点数类型转换

优化实现

基础易读版

逻辑清晰,适合大多数场景:

strng = "0.000000000000000E+000, 2*2.400000000000000E-002  , 97*0.000000000000000E+000  ,"
res = []
# 拆分后去除每个元素的首尾空白
for part in map(str.strip, strng.split(',')):
    # 跳过空串和换行符
    if not part:
        continue
    if '*' in part:
        cnt, val = part.split('*')
        # 重复对应次数的浮点数加入列表
        res.extend([float(val)] * int(cnt))
    else:
        res.append(float(part))

简洁性能版

使用itertools.repeat减少内存占用,适合重复次数极大的场景:

from itertools import repeat

strng = "0.000000000000000E+000, 2*2.400000000000000E-002  , 97*0.000000000000000E+000  ,"
res = []
for part in filter(None, map(str.strip, strng.split(','))):
    cnt, _, val = part.rpartition('*')
    res.extend(repeat(float(val), int(cnt))) if cnt else res.append(float(val))

结果验证

最终生成的列表总长度为1+2+97=100,前3个元素为[0.0, 0.024, 0.024],后续97个元素均为0.0,完全符合转换要求。

内容的提问来源于stack exchange,提问作者wander95

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 06:24:08