2016-07-27 71 views
-3

如果我有一个像下面给出的列表,并希望将给定的整数转换为浮点数,有没有办法可以用map()做到这一点?Python转换为浮点使用map()

my_list=[['Hello', 1 , 3],['Hi', 4 , 6]] 
+1

是的,有。你有尝试过什么吗? – jonrsharpe

+2

这个问题有点像:“我有一个钉子和一个木板,我想钉在木板上,我可以用鞋做这个吗?” –

回答

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]] 

编辑

我个人比较喜欢列表理解在大多数情况下,而不是映射/λ,特别是在这些地方所有转换为列表都很烦人:

print([ 
    [float(x) if type(x) == int else x for x in lst] 
    for lst in my_list 
]) 

EDIT 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

这是如此,如此糟糕,我想downvote它,但没有很好的理由。从技术上讲,这是正确的,这次不是最好的。 :( –

+0

谢谢@smarx,我正在寻找一种除循环以外的方法!:) –

+0

地图/理解和循环之间有一个重要的区别 - 地图创建一个新的列表,数据被复制并更改为浮点。另一方面,循环会更改数据。不同的是* CRUCIAL *如果还有其他原始列表的引用。 –

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]] 
跨列表的列表功能