将字符串转换为浮点,并在列表理解内进行错误处理

时间:2019-06-03 03:30:32

标签: python-3.x list loops exception list-comprehension

请考虑以下列表列表:

list1 = [['1.1','1.2'],['2.1', '2.2'],[''],...]

此列表包含带有空字符串的列表。要将列表中的所有字符串转换为浮点数,可以使用列表理解,例如:

[[float(j) for j in i] for i in list1]

(感谢to)。

但是包含空字符串的列表存在一个问题-它们会导致异常:

  

ValueError:无法将字符串转换为float:

是否有一种无需明确使用循环就可以使用这种列表理解的方法?

1 个答案:

答案 0 :(得分:1)

在内部列表推导内使用if条件来忽略空字符串:

[[float(j) for j in i if i] for i in list1]

if i将测试字符串的“真实性”。对于空字符串,这只会返回False,因此它们将被忽略。

或者,如果您想对其进行更完善的处理,请使用函数来执行带有异常处理的转换:

def try_convert(val):
    try:
        return float(val)
    except ValueError, TypeError:
        pass

[[float(z) for z in (try_convert(j) for j in i) if z] for i in list1]