首先,您需要一个函数来执行“如果可能的话将字符串转换为浮点数,否则将其保留为字符串”:
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)