请求优化repeat_sum函数:解决嵌套列表跨子列表重复求和问题
解决方案
原代码的核心问题是将嵌套列表完全扁平化后统计元素出现次数,这会把单个子列表内的重复元素误判为跨子列表的重复,导致结果错误。正确的思路应该是统计每个整数出现在多少个不同的子列表中,而非统计其在全局的出现次数。
修正后的代码
def repeat_sum(arr): count_map = {} for sublist in arr: # 对当前子列表去重,避免同一子列表内的重复元素重复计数 unique_nums = set(sublist) for num in unique_nums: count_map[num] = count_map.get(num, 0) + 1 # 求和所有出现在至少两个子列表中的数字 return sum(num for num, cnt in count_map.items() if cnt >= 2)
逻辑说明
- 初始化字典
count_map,用于记录每个数字对应的子列表出现次数 - 遍历每个子列表:
- 将子列表转为集合,去除内部重复元素(同一子列表内的重复数字仅算一次出现)
- 对集合中的每个数字,更新其在字典中的计数
- 筛选出字典中计数≥2的数字,求和后返回
示例验证
- 输入:
[[1, 2, 3],[2, 8, 9],[7, 123, 8]]→ 输出:10(2和8各出现在2个子列表,2+8=10) - 输入:
[[1, 8, 8], [8, 8, 8], [8, 8, 8, 1]]→ 输出:9(1出现在2个子列表,8出现在3个子列表,1+8=9) - 输入:
[[1], [2], [3, 4, 4, 4], [123456789]]→ 输出:0(所有数字仅出现在1个子列表)
内容的提问来源于stack exchange,提问作者TAHER El Mehdi
相关产品推荐
相关产品推荐

