如何解决此ValueError:无法将字符串转换为float?

2024-10-03 13:21:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我要对所有列表对象执行数学运算:

swl = ['0', '0', '0', '', '', '', '1', '1', '1', '1', '1', '0.25']

数学运算:sgu = 1 - swl,我想把sgu格式化为:

sgu_compact = ['3*1', '3*', '5*0', '0.75']

这就是我所拥有的:

sgu = []
for ii in range(0, int(len(swl))):
    if len(swl[ii]) == 0:
        sgu.append(swl[ii])
    else:
        sgu.append(1-float(swl[ii]))

sguflt = [float(x) for x in swl]
sgu2 = ['{:g}'.format(float('{:.6g}'.format(i))) for i in sgu]

sgu_compact = ['%s*' % len(l) * (len(l) > 1) + k for k, g in groupby(sgu2)
                for l in (list(g),)]

print sgu_compact

但是我得到ValueError是因为空列表对象。有人能帮我吗?你知道吗


Tags: 对象informat列表forlenrange数学
2条回答

这可能是优化更多,但它似乎做什么你说你想要的。基本上,它只是检查并传递每个步骤中遇到的任何空字符串值。你知道吗

from itertools import groupby

swl = ['0', '0', '0', '', '', '', '1', '1', '1', '1', '1', '0.25']

sgu = []
for value in swl:
    if len(value):
        sgu.append(1 - float(value))
    else:
        sgu.append(value)

sguflt = [float(x) if x is not '' else '' for x in swl]

sgu2 = ['{:g}'.format(float('{:.6g}'.format(i))) if i is not '' else '' for i in sgu]

sgu_compact = ['%s*' % len(l) * (len(l) > 1) + k for k, g in groupby(sgu2)
                for l in (list(g),)]

print sgu_compact  # -> ['3*1', '3*', '5*0', '0.75']

只需过滤掉空值:

swl = ['0', '0', '0', '', '', '', '1', '1', '1', '1', '1', '0.25']
swl = [x for x in swl if len(x)]

相关问题 更多 >