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

如何对两个数组求和且不重复计算相同元素?

如何对两个数组去重后求和(不重复计算相同值)

嘿,我懂你碰到的困扰了——两个数组里说不定既有各自内部的重复元素,又有彼此重叠的值,直接把所有元素加起来肯定会把相同的数算好几遍,对吧?别慌,我给你分享几个实用的解决办法,拿最常用的Python和JavaScript举例,核心思路通用其他语言哦。

核心思路

不管用什么语言,核心步骤都是这三步:

  1. 把两个数组合并成一个集合(或者其他能自动去重的结构)
  2. 剔除掉所有重复出现的元素
  3. 对去重后的元素求和

Python 实现方法

方法1:用集合快速去重(最简便)

集合的特性就是不允许重复元素,刚好完美适配这个需求:

arr1 = [1, 2, 3, 4, 2]  # 内部有重复的2
arr2 = [3, 4, 5, 6, 5]  # 内部有重复的5,和arr1重叠3、4
# 合并数组并转成集合自动去重
unique_nums = set(arr1 + arr2)
# 直接求和
total = sum(unique_nums)
print(total)  # 输出:1+2+3+4+5+6 = 21

这个方法效率很高,不管是数组内部的重复还是数组间的重叠,都能一次性处理掉。

方法2:保留元素首次出现的顺序(如果需要)

集合是无序的,要是你想保留元素第一次出现的顺序,可以用字典的fromkeys方法(Python 3.7+ 字典会保留插入顺序):

arr1 = [2, 1, 3, 3]
arr2 = [3, 4, 2, 5]
merged_arr = arr1 + arr2
# 用字典键去重,同时保留顺序
unique_ordered = list(dict.fromkeys(merged_arr))
total = sum(unique_ordered)
print(total)  # 输出:2+1+3+4+5 = 15

JavaScript 实现方法

方法1:Set + Reduce 求和

和Python的思路类似,用Set去重后,再用reduce累加求和:

const arr1 = [1, 2, 3, 4, 2];
const arr2 = [3, 4, 5, 6, 5];
// 合并两个数组,转成Set去重,再转回数组
const uniqueNums = [...new Set([...arr1, ...arr2])];
// 用reduce累加计算总和
const total = uniqueNums.reduce((acc, current) => acc + current, 0);
console.log(total); // 输出21

方法2:手动遍历去重(适合理解底层逻辑)

要是你想手动实现去重逻辑,也可以用对象记录已经出现过的元素:

const arr1 = [1, 2, 3, 4, 2];
const arr2 = [3, 4, 5, 6, 5];
const seen = {};
let total = 0;

// 遍历第一个数组
arr1.forEach(num => {
  if (!seen[num]) {
    seen[num] = true;
    total += num;
  }
});

// 遍历第二个数组,只加没出现过的元素
arr2.forEach(num => {
  if (!seen[num]) {
    seen[num] = true;
    total += num;
  }
});

console.log(total); // 输出21

这个方法适合新手理解去重求和的底层逻辑,不用依赖内置的Set结构。

不管你用哪种语言,只要抓住「去重再求和」的核心,都能轻松解决问题~

内容的提问来源于stack exchange,提问作者Tysaic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:13:00