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

如何用更Pythonic的方法替换列表中连续重复元素为首次出现值

实现方法

方法1:使用标准库itertools.groupby(最推荐)

这是最符合Pythonic风格的实现,利用标准库内置方法完成需求,可读性和效率都拉满:

import itertools

origin = [1, 1, 1, 2, 3, 3, 3, 4, 4, 5, 1, 1, 1]
res = [key for key, _ in itertools.groupby(origin)]
print(res) # 输出:[1, 2, 3, 4, 5, 1]

itertools.groupby会自动将连续重复的元素归为同一组,迭代返回(组标识, 组内元素迭代器)格式的元组,我们只需要提取每个组的标识即可得到目标结果。
注意:groupby仅识别连续重复元素,非连续的相同元素会被判定为不同分组,刚好匹配你的需求,不会像set一样全局去重导致最后一个1被误删。

方法2:无导入的简化实现(Python3.8+支持)

如果不想导入依赖,也可以用海象运算符简化手写循环的逻辑:

origin = [1, 1, 1, 2, 3, 3, 3, 4, 4, 5, 1, 1, 1]
prev = object()
res = [prev := val for val in origin if val != prev]
print(res) # 输出:[1, 2, 3, 4, 5, 1]

这里初始化prev为一个和所有列表元素都不可能相等的占位对象,遍历过程中仅保留和前一个元素值不同的元素,同时更新prev的值,时间复杂度和手写循环一致,写法更简洁。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 08:00:05