为了账号安全,请及时绑定邮箱和手机立即绑定

如何将字符串小数转换为浮点数?

如何将字符串小数转换为浮点数?

富国沪深 2023-06-06 15:57:58
my_list=[['A','B','C','0.0'],['D','E','F','1.2'],['G','H','I','0'],['J','K','L','M']]我尝试了这些,但它们只能将整数转换为浮点数并将其余的保留为字符串。[[float(x) if x.isnumeric() else x for x in i] for i in my_list]for i, sublist in enumerate(my_list):     for j, x in enumerate(sublist):            if x.isnumeric():                my_list[i][j] = float(x)预期产出[['A','B','C',0.0],['D','E','F',1.2],['G','H','I',0],['J','K','L','M']]
查看完整描述

3 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

如果除了“任何东西可能是或可能不是有效的浮点数”之外没有其他标准,那么就try全部:


def try_float(value):

    try:

        return float(value)

    except ValueError:

        return value


result = [[try_float(v) for v in l] for l in my_list]


查看完整回答
反对 回复 2023-06-06
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

.isnumeric不返回True表示为字符串的浮点数。对于仅由数字组成而.不是数字的字符串,它返回 true。

这就是为什么您的解决方案只转换整数,而不转换浮点数。

检查字符串是否为浮点数并因此对其进行转换的最佳选择是尝试float()捕获引发的ValueError并简单地继续。

如果您知道嵌套只有一层深,deceze 的解决方案应该会做得很好。

如果可能有更多嵌套,您可以尝试递归函数 -

def convert_float(l: list):

    for i, v in enumerate(l):

        if type(v) == list:

            convert_float(v)

            continue

        try:

            l[i] = float(v)

        except ValueError:

            continue


查看完整回答
反对 回复 2023-06-06
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

您也可以使用regex它来查找。像下面这样的东西:


In [105]: import re


In [106]: r = re.compile(r"^\d*[.,]?\d*$")


In [107]: [[float(v) if r.match(v) else v for v in l] for l in my_list]

Out[107]: 

[['A', 'B', 'C', 0.0],

 ['D', 'E', 'F', 1.2],

 ['G', 'H', 'I', 0.0],

 ['J', 'K', 'L', 'M']]


查看完整回答
反对 回复 2023-06-06
  • 3 回答
  • 0 关注
  • 105 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信