"地图" Python中的嵌套列表

时间:2015-12-04 04:16:08

标签: python python-2.7

在Python中,我试图将运算符应用于两层嵌套数组。例如,

a = [['2.3','.2'],['-6.3','0.9']]
for j in range(2)
    for i in range(2)
        a[i][j] = float(a[i][j])

如果没有循环,我怎么能这样做?我希望有类似于a = map(float,a)的东西。当然,最后一个脚本不适用于嵌套列表。单行列表理解也是可以接受的。

4 个答案:

答案 0 :(得分:8)

混合了map和listcomp:

的单行
a = [map(float, suba) for suba in a]  # Only works on Py2

或变种:

# Both of the below work on Py2 and Py3
a = [list(map(float, suba)) for suba in a]
a = [[float(x) for x in suba] for suba in a]

根据您的个人偏好选择并定位Python版本。对于CPython 2上的大型嵌套列表,第一个变体可能是最快的(如果内部列表很大,它会避免查找开销以获取内部float的{​​{1}}构造函数和字节代码执行,list包裹的等价物可能最终在CPython 3上获胜;对于所有版本的小型嵌套列表,嵌套列表推导通常是最快的。

答案 1 :(得分:6)

使用列表理解:

a =  [[float(j) for j in i]  for i in a]

答案 2 :(得分:2)

第一个参数需要一个函数,因此,您可以利用lambda运算符将float映射到子列表。这是一个例子:

if(){
    res.setHeader("fsd", "FAILURE");
    res.sendError(HttpServletResponse.SC_FORBIDDEN);
    /*res.sendRedirect("/searchReleaseLockLogout");*/                    
    req.getRequestDispatcher("/searchReleaseLockLogout").forward(req, res);
    return;
}

答案 3 :(得分:1)

在幕后,map也是一个循环。你应该只使用列表理解,但是有一种很好的方法可以用Python2做 - 你需要一个partial函数

>>> a = [['2.3','.2'],['-6.3','0.9']]
>>> from functools import partial
>>> map(partial(map, float), a)
[[2.3, 0.2], [-6.3, 0.9]]

我不认为有一种很好的方法可以将其转换为Python3,但

>>> list(map(list, map(partial(map, float), a)))  #YUKKK!
[[2.3, 0.2], [-6.3, 0.9]]