You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Haskell如何不用列表推导式用map实现二维列表转置后转一维

等价实现方案

你给出的列表推导式本质是对n×n方阵先做转置,再按行拼接为一维列表,仅用map加concat的等价实现如下:

concat $ map (\x -> map (\y -> l !! y !! x) [0 .. length l - 1]) [0 .. length l - 1]

逻辑说明

  • 原列表推导式的多重生成器逻辑可以拆解为:外层遍历列索引x,内层遍历行索引y,逐个取l!!y!!x拼接结果,和上述实现逻辑完全对齐
  • 内层map (\y -> l !! y !! x) [0 .. length l - 1]:固定列索引x时,遍历所有行取出对应列的元素,生成转置后的第x行
  • 外层map遍历所有列索引,生成转置后的整个二维列表
  • 最后用concat将嵌套列表拍平为一维列表,和原推导式输出完全一致

验证示例

以方阵l = [[1,2],[3,4]]为例:

  • 原推导式输出为[1,3,2,4]
  • 上述实现运行后输出结果完全相同

注意:该实现和你给出的原始列表推导式一样,仅适用于行数等于列数、且所有行长度与方阵边长一致的规则方阵,不规则二维列表需要额外补充边界处理逻辑。

内容的提问来源于stack exchange,提问作者NbNb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 00:06:06