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

时间:2013-02-14 22:51:21

标签: python list nested

我有一个列表,其中包含数字和单词的字符串 我想只将那些数字的字符串转换成浮点数

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

1 个答案:

答案 0 :(得分: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)