连续重复元素去重需求:将连续重复的相同元素保留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]
逻辑说明
- 先判断原列表是否为空,为空直接返回空列表
- 初始化结果列表,将第一个元素作为初始对比基准
- 遍历后续元素,逐个与结果列表的最后一个元素对比:
- 对于null/None,直接用
==/is判断是否相同 - 对于其他元素,用
equals(Java)或==(Python)判断是否相同 - 仅当当前元素与前一个元素不同时,才加入结果列表
- 对于null/None,直接用
内容的提问来源于stack exchange,提问作者semiha baltık
相关产品推荐
相关产品推荐

