Python列表如何合并连续重复项为单个且保留后续相同值?
Python3 列表连续重复元素合并方案
你需要实现的是仅合并连续重复元素、保留非连续重复值的逻辑,和set()实现的全局去重逻辑完全不同,以下是两种可直接运行的实现方式:
- 无额外依赖的基础遍历实现
a = [1, 1, 1, 2, 2, 3, 3, 3, 1, 1, 1, 2, 2, 2, 4, 4, 4, 3, 3, 3, 3] b = [] for current in a: # 结果列表为空,或当前元素与结果列表最后一个元素不同时追加 if not b or current != b[-1]: b.append(current) print(b) # 输出:[1, 2, 3, 1, 2, 4, 3]
实现逻辑非常直观,每次只校验当前元素和上一个加入结果的元素是否一致,相同则跳过,不同则新增,自然只会合并连续出现的重复值。
- 基于标准库
itertools.groupby的简洁实现
from itertools import groupby a = [1, 1, 1, 2, 2, 3, 3, 3, 1, 1, 1, 2, 2, 2, 4, 4, 4, 3, 3, 3, 3] b = [key for key, _ in groupby(a)] print(b) # 输出:[1, 2, 3, 1, 2, 4, 3]
groupby是Python标准库专门用于按连续相同元素分组的工具,会将连续相同的元素归为同一组,我们只需要取每组的键即可得到目标结果,代码更简洁高效。
内容的提问来源于stack exchange,提问作者Stack_Over
相关产品推荐
相关产品推荐

