首页 > 解决方案 > 将此映射转换为 for 语句

问题描述

map以下语句到for循环的正确转换是什么?

map(lambda x: map(lambda y: map(lambda z: x*y*z, [5,6]), [3,4]), [1,2])
# [[[15, 18], [20, 24]], [[30, 36], [40, 48]]]

我的第一次尝试是这样的:

x_tmp = []
for x in [1,2]:
    y_tmp = []
    for y in [3,4]:
        z_tmp = []
        for z in [5,6]:
            z_tmp.append(x*y*z)
        y_tmp.append(z_tmp)
    x_tmp.append(y_tmp)

x_tmp
# [[[15, 18], [20, 24]], [[30, 36], [40, 48]]]

但这似乎很奇怪,我无法想象这将是它的实际翻译。有没有更接近循环map显示的工作方式的东西?for

我想也许它会接近:

[x*y*z for x in [1,2] for y in [3,4] for z in [5,6]]
# [15, 18, 20, 24, 30, 36, 40, 48]

但这似乎失去了所有的嵌套,而是做一个平面映射。

要执行列表理解方式,它似乎不仅需要嵌套,而且 args 也需要反转,例如:

>>> [[[x*y*z for z in [5,6]] for y in [3,4]] for x in [1,2]]
# [[[15, 18], [20, 24]], [[30, 36], [40, 48]]]

标签: pythonpython-3.xfunctional-programmingnested-loopsmap-function

解决方案


实际上,您的第一次尝试是对嵌套for循环的适当转换。您的最后尝试是对嵌套列表理解的适当转换。

我不知道你为什么觉得这些不满意;展开循环通常是一件麻烦事。您刚刚以等效形式提供了一个可爱的入门。:-)


推荐阅读