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

如何用Python的functools.reduce实现类似R中Reduce的连续去重功能?

用Python的functools.reduce实现连续重复值去重

你之前的代码报错是因为reduce默认会将列表第一个元素作为初始累积值a,此时a是整数类型,无法通过a[-1]访问元素。

要实现和R中Reduce风格一致的一行代码,只需给reduce指定初始累积值为列表,并调整判断逻辑:

from functools import reduce
x = [1,2,2,4,10,5,5,7]
# 通用版,支持空列表输入
reduce(lambda a, b: a + [b] if not a or a[-1] != b else a, x, [])

运行后得到结果[1, 2, 4, 10, 5, 7],和R中rle(x)$values的效果完全一致。

如果确定输入列表非空,也可以写成更贴近R原代码逻辑的版本:

reduce(lambda a, b: a + [b] if a[-1] != b else a, x[1:], [x[0]])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 19:18:13