如果我有一个类似下面给出的列表,并希望将给定的整数转换为浮点数,有没有办法可以用map()做到?
my_list=[['Hello', 1 , 3],['Hi', 4 , 6]]
答案 0 :(得分:3)
这很难看,但是,可以做到:
my_list=[['Hello', 1 , 3],['Hi', 4 , 6]]
print(list(map(lambda lst: list(map(lambda x: float(x) if type(x) == int else x, lst)), my_list)))
# Output: [['Hello', 1.0, 3.0], ['Hi', 4.0, 6.0]]
修改强>
在大多数情况下,我个人更喜欢列表理解而不是map / lambda,特别是在这里,列表的所有转换都很烦人:
print([
[float(x) if type(x) == int else x for x in lst]
for lst in my_list
])
编辑2
最后,一个使用旧的for循环的就地解决方案:
for lst in my_list:
for i, item in enumerate(lst):
if type(item) == int:
lst[i] = float(item)
print(my_list)
答案 1 :(得分:0)
如果您要使用map
,可以通过将其与先前定义的函数一起使用来提高可读性。首先创建一个函数,如果可能的话,将一个对象转换为一个浮点数,如果不是,则单独留下它:
def toFloat(x):
try:
return float(x)
except:
return x
然后,您可以在以下列表中映射:
def listToFloats(items):
return list(map(toFloat,items))
然后将这最后一个函数映射到列表列表中:
def listsToFloats(lists):
return list(map(listToFloats,lists))
例如:
>>> my_list=[['Hello', 1 , 3],['Hi', 4 , 6]]
>>> listsToFloats(my_list)
[['Hello', 1.0, 3.0], ['Hi', 4.0, 6.0]]