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

连续重复元素去重需求:将连续重复的相同元素保留1个

连续重复元素去重实现

需求:将列表中连续重复的相同元素(包含null/None、字符串、整数等各类元素)的数量缩减为1,非连续的重复元素保留。

示例

  • 初始列表:
list = { null, 1, 2, null, null, null, 4, 5, 6 };
  • 期望结果:
list = { null, 1, 2, null, 4, 5, 6 };

Java 实现方案

import java.util.ArrayList;
import java.util.List;

public class RemoveConsecutiveDuplicates {
    public static <T> List<T> removeConsecutiveDuplicates(List<T> originalList) {
        if (originalList == null || originalList.isEmpty()) {
            return new ArrayList<>();
        }

        List<T> resultList = new ArrayList<>();
        T previous = originalList.get(0);
        resultList.add(previous);

        for (int i = 1; i < originalList.size(); i++) {
            T current = originalList.get(i);
            // 处理null的特殊情况,避免空指针异常
            if (previous == null) {
                if (current != null) {
                    resultList.add(current);
                    previous = current;
                }
            } else {
                if (!previous.equals(current)) {
                    resultList.add(current);
                    previous = current;
                }
            }
        }

        return resultList;
    }

    public static void main(String[] args) {
        List<Object> original = new ArrayList<>();
        original.add(null);
        original.add(1);
        original.add(2);
        original.add(null);
        original.add(null);
        original.add(null);
        original.add(4);
        original.add(5);
        original.add(6);

        List<Object> result = removeConsecutiveDuplicates(original);
        System.out.println(result); // 输出: [null, 1, 2, null, 4, 5, 6]
    }
}

Python 实现方案

def remove_consecutive_duplicates(original_list):
    if not original_list:
        return []
    
    result = [original_list[0]]
    for elem in original_list[1:]:
        # 用is判断None,用==判断其他元素,确保连续重复去重
        if elem is not result[-1]:
            result.append(elem)
    return result

original = [None, 1, 2, None, None, None, 4, 5, 6]
result = remove_consecutive_duplicates(original)
print(result)  # 输出: [None, 1, 2, None, 4, 5, 6]

逻辑说明

  1. 先判断原列表是否为空,为空直接返回空列表
  2. 初始化结果列表,将第一个元素作为初始对比基准
  3. 遍历后续元素,逐个与结果列表的最后一个元素对比:
    • 对于null/None,直接用==/is判断是否相同
    • 对于其他元素,用equals(Java)或==(Python)判断是否相同
    • 仅当当前元素与前一个元素不同时,才加入结果列表

内容的提问来源于stack exchange,提问作者semiha baltık

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 22:30:43