Python-使用map()

时间:2016-07-27 20:01:14

标签: python-3.x

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

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

2 个答案:

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