【问题标题】:Converting string to float with error handling inside a list comprehension在列表理解中使用错误处理将字符串转换为浮点数
【发布时间】:2019-10-18 14:55:54
【问题描述】:

考虑以下列表:

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

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

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

(感谢to)。

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

ValueError:无法将字符串转换为浮点数:

有没有办法在不显式使用循环的情况下使用这种列表推导?

【问题讨论】:

  • 如果列表实际上为空,您将不会收到错误消息。你没有在这里画出完整的画面。
  • @cs95 你是对的,“空”列表实际上包含空字符串,我将编辑我的帖子。
  • 空字符串可以忽略吗?
  • @Pynchia 是前者,如果我理解你的问题的话。
  • @cs95 是的,但这可以变成列表理解吗?我知道如果这是唯一的方法,可以事先从列表中删除空字符串。

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


【解决方案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]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    • 2010-11-17
    • 2020-12-17
    • 2011-11-25
    • 2017-09-26
    • 1970-01-01
    相关资源
    最近更新 更多