将嵌套列表中的字符串转换为浮点数
我有一个包含多个列表的列表,这些列表里有数字和单词的字符串。
我想把里面的数字字符串转换成浮点数。
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)