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

如何在F#中实现子列表对应元素相加?示例:[[10;2;10];[10;50;10]]→[20;52;20]

在F#中实现子列表对应元素相加的几种方法

刚好之前也处理过类似的需求,给你分享几个实用的实现方式:

方法一:针对两个子列表的简单实现

如果你的需求只需要处理两个子列表,用List.zip配合List.map就能轻松搞定:

let addTwoSublists listA listB =
    List.zip listA listB |> List.map (fun (x, y) -> x + y)

// 代入你的测试案例
let testInput = [[10;2;10];[10;50;10]]
addTwoSublists testInput.[0] testInput.[1] // 输出 [20;52;20]

List.zip会把两个列表中对应位置的元素配对成元组,之后我们只需要对每个元组执行加法操作就行。

方法二:支持任意数量子列表的通用实现

如果以后需要处理更多子列表(比如3个、4个),推荐用List.transpose来转置列表,再对每个转置后的子列表求和,这个方法更通用:

let addCorrespondingElements sublists =
    sublists |> List.transpose |> List.map List.sum

// 直接测试你的案例
addCorrespondingElements [[10;2;10];[10;50;10]] // 直接得到 [20;52;20]

List.transpose的作用是把二维列表的行和列互换,比如你的输入转置后会变成[[10;10];[2;50];[10;10]],之后每个子列表求和就是对应位置的元素相加,完美匹配你的需求。

可选:添加长度检查的安全版本

如果担心输入的子列表长度不一致(这种情况List.transpose会抛出异常),可以加个前置检查:

let addCorrespondingElementsSafe sublists =
    let uniqueLengths = sublists |> List.map List.length |> List.distinct
    if uniqueLengths.Length <> 1 then
        failwith "所有子列表的长度必须相同哦"
    else
        sublists |> List.transpose |> List.map List.sum

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:00:07