如何移除列表中的连续重复元素同时保留原有顺序
实现方法
方法1:手动迭代(无额外依赖,兼容性最好)
遍历原列表,仅当当前元素与结果列表最后一个元素不同时才追加,所有Python版本均可运行,也方便自定义调整逻辑。
def remove_consecutive_duplicates(lst): # 处理空列表边界情况 if not lst: return [] result = [lst[0]] for item in lst[1:]: if item != result[-1]: result.append(item) return result # 测试 lst = ['a','a','b','a', 'a', 'c', 'c', 'c','d','e','a', 'b', 'b', 'b'] print(remove_consecutive_duplicates(lst)) # 输出:['a', 'b', 'a', 'c', 'd', 'e', 'a', 'b']
方法2:用标准库itertools.groupby(写法更简洁高效)
itertools.groupby默认会将连续出现的相同元素归为一组,直接取每组的key即可得到目标结果,性能优于手动迭代,适合处理长列表。
from itertools import groupby lst = ['a','a','b','a', 'a', 'c', 'c', 'c','d','e','a', 'b', 'b', 'b'] result = [key for key, _ in groupby(lst)] print(result) # 输出:['a', 'b', 'a', 'c', 'd', 'e', 'a', 'b']
注意:不要提前给
groupby传入排序后的列表,否则会移除全部重复元素,和set效果一致。
内容的提问来源于stack exchange,提问作者Ali
相关产品推荐
相关产品推荐

