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

Kotlin中是否有函数式方法将列表转换为相邻元素和列表?

用函数式方法实现列表相邻元素求和

针对你提到的需求,其实不用局限在reduce/fold本身,函数式编程里有更直接的实现方式;如果一定要用reduce/fold,也可以通过调整累积值的结构来解决重叠元素对的问题。

方法1:zip + map(最直观的函数式实现)

把原列表和它的切片(从第二个元素开始)配对,再对每一对元素执行求和操作:

nums = [1, 2, 5, 2]
result = list(map(lambda a, b: a + b, nums, nums[1:]))
# 输出: [3, 7, 7]

原理是zip(nums, nums[1:])会生成(1,2), (2,5), (5,2)这样的元组对,map遍历这些元组并计算和,最后转成列表即可。这种方式完全符合函数式风格,简洁高效。

方法2:用reduce/fold实现

如果一定要基于reduce实现,可以让累积值同时保存前一个元素和已生成的结果列表,每次迭代时计算当前元素与前一个元素的和,追加到结果列表中:

from functools import reduce

nums = [1, 2, 5, 2]
if len(nums) < 2:
    result = []
else:
    _, result = reduce(
        lambda acc, curr: (curr, acc[1] + [acc[0] + curr]),
        nums[1:],
        (nums[0], [])
    )
# 输出: [3, 7, 7]

这里的初始累积值是(nums[0], [])——第一个元素是原列表的首元素(作为“前一个元素”),第二个是空列表(用于存储结果)。每次迭代时,用累积的前一个元素和当前元素求和,把结果追加到结果列表,同时更新累积的前一个元素为当前元素。最后忽略累积的前一个元素,取出结果列表即可。

注意:若原列表长度小于2,直接返回空列表避免报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 00:42:07