将嵌套列表中的字符串转换为浮点数

-1 投票
1 回答
1231 浏览
提问于 2025-04-17 15:56

我有一个包含多个列表的列表,这些列表里有数字和单词的字符串。
我想把里面的数字字符串转换成浮点数。

aList= [ ["hi", "1.33"], ["bye", " 1.555"] ] 

1 个回答

4

首先,你需要一个函数,这个函数的作用是“如果可能的话把字符串转换成浮点数,否则就保持它是字符串”。

def floatify(s):
    try:
        return float(s)
    except ValueError:
        return s

现在,你可以对每个值调用这个函数,要么生成一个新的列表,要么直接修改原来的列表。

因为你有一个嵌套列表,所以这意味着需要嵌套循环。你可以先分两步来做:

def floatify_list(lst):
    return [floatify(s) for s in lst]

def floatify_list_of_lists(nested_list):
    return [floatify_list(lst) for lst in nested_list]

当然,你也可以把它合并成一个函数,只需把 floatify_list 作为一个局部函数来使用:

def floatify_list_of_lists(nested_list):
    def floatify_list(lst):
        return [floatify(s) for s in lst]
    return [floatify_list(lst) for lst in nested_list]

你也可以通过在函数调用的地方直接替换内部表达式来实现。如果你自己搞不定这个方法,我建议你不要这样做,因为你可能不会理解(复杂的嵌套列表推导连专家都觉得难),但如果你非要这样做:

def floatify_list_of_lists(nested_list):
    return [[floatify(s) for s in lst] for lst in nested_list]

或者,如果你喜欢让你的Python看起来像是糟糕伪装的Haskell:

def floatify_list_of_lists(nested_list):
    return map(partial(map, floatify), nested_list)

撰写回答