如果我有一个像下面给出的列表,并希望将给定的整数转换为浮点数,有没有办法可以用map()做到这一点?Python转换为浮点使用map()
my_list=[['Hello', 1 , 3],['Hi', 4 , 6]]
如果我有一个像下面给出的列表,并希望将给定的整数转换为浮点数,有没有办法可以用map()做到这一点?Python转换为浮点使用map()
my_list=[['Hello', 1 , 3],['Hi', 4 , 6]]
这是丑陋的,但是,是的,这是可以做到:
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)
这是如此,如此糟糕,我想downvote它,但没有很好的理由。从技术上讲,这是正确的,这次不是最好的。 :( –
谢谢@smarx,我正在寻找一种除循环以外的方法!:) –
地图/理解和循环之间有一个重要的区别 - 地图创建一个新的列表,数据被复制并更改为浮点。另一方面,循环会更改数据。不同的是* CRUCIAL *如果还有其他原始列表的引用。 –
如果你要使用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]]
跨列表的列表功能
是的,有。你有尝试过什么吗? – jonrsharpe
这个问题有点像:“我有一个钉子和一个木板,我想钉在木板上,我可以用鞋做这个吗?” –