我发现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'
之类的项目,我想将其转换为浮点数,而其他列表包含'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次更好的方法。
我要去哪里错了?
答案 0 :(得分:2)
通过为列表分配一个新列表,您将失去对要替换的原始列表的引用。
所以代替:
item = list(map(lambda x: float(x.replace(",", "")), item))
您应该将新列表分配给一个临时变量,如果它没有引发异常,请清除原始列表并使用该临时列表进行扩展,以免丢失原始引用:
temp = list(map(lambda x: float(x.replace(",", "")), item))
item.clear()
item.extend(temp)