如何构建支持整数列表连续相同元素分组求和的Proxy类
实现方案
核心逻辑说明
根据你给出的示例访问结果和分组对应关系,实际分组规则可梳理为:
- 所有值为
0的元素无论是否连续,都单独作为一个分组,求和结果恒为0 - 连续出现的相同非0元素合并为一个分组,分组求和结果为元素值乘以出现次数
- 不连续的非0元素(包括相邻但值不同的非0元素)各自单独成组
完整代码实现
class Proxy: def __init__(self, original_list): groups = [] current_non_zero = [] for num in original_list: if num == 0: # 先保存之前未处理的非0分组 if current_non_zero: groups.append(current_non_zero) current_non_zero = [] # 0单独成组 groups.append([num]) else: if not current_non_zero: current_non_zero.append(num) else: if current_non_zero[-1] == num: current_non_zero.append(num) else: # 相邻非0值不同,先保存旧分组 groups.append(current_non_zero) current_non_zero = [num] # 处理遍历结束后剩余的非0分组 if current_non_zero: groups.append(current_non_zero) # 预计算所有分组的求和结果 self._sum_cache = [sum(g) for g in groups] def __getitem__(self, index): # 实现[]索引访问逻辑 return self._sum_cache[index]
测试验证
# 测试用例 l = [0, 0, 1, 1, 1, 0, 6, 2, 3, 3, 3, 3, 0, 0] proxy = Proxy(l) print(proxy[0]) # 输出 0 print(proxy[1]) # 输出 0 print(proxy[2]) # 输出 3 print(proxy[3]) # 输出 0 print(proxy[4]) # 输出 6 print(proxy[5]) # 输出 2 print(proxy[6]) # 输出 12 print(proxy[7]) # 输出 0 print(proxy[8]) # 输出 0
运行结果和你给出的预期完全一致。
内容的提问来源于stack exchange,提问作者user17189165
相关产品推荐
相关产品推荐

