代码之家  ›  专栏  ›  技术社区  ›  Jim421616

将大量字符串列表转换为浮点

  •  1
  • Jim421616  · 技术社区  · 7 年前

    我找到了 in this question 如何将字符串列表转换为浮点数:

    list_of_floats = list(map(lambda x: float(x.replace(",", "")), list_of_string_floats))
    

    我实际上有12个列表要转换:

    U_mag = list(map(lambda x: float(x.replace(",", "")), U_mag))
    B_mag = list(.........................................B_mag))
    

    等。

    有些列表包含以下项: '-999.000' ,我想将其转换为float,而其他的则有类似的项 'act' 'QSO' ,将保留为字符串。当然,我可以写12遍以上的同一行!

    我试过了

    for item in (U_mag, B_mag, V_mag, R_mag, K_mag, W1_mag,
              W2_mag, W3_mag, W4_mag, L_UV, Q, flag_uv):
        try:
            item = list(map(lambda x: float(x.replace(",", "")), item))
        except:
            pass
    

    这不会引发任何错误,但不会按预期更改列表。当然,还有比写12次同样的代码更好的方法。

    我哪里出错了?

    1 回复  |  直到 7 年前
        1
  •  2
  •   blhsing    7 年前

    通过将列表指定为新列表,您将丢失对要替换的原始列表的引用。

    所以不是:

    item = list(map(lambda x: float(x.replace(",", "")), item))
    

    您应该将新列表分配给一个临时变量,如果它没有引发异常,则清除原始列表并用临时列表扩展它,这样就不会丢失原始引用:

    temp = list(map(lambda x: float(x.replace(",", "")), item))
    item.clear()
    item.extend(temp)