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

Python:优化大数组间元素出现次数统计的方法

如何优化百万级数组元素出现次数总和统计的性能?

我写了一段脚本,用来统计array_1中各元素在array_2里出现的次数总和,代码如下:

array_1 = [1,2,0,5,7,0]
array_2 = [1,0,1,1,9,6]
# array_2中1出现3次,0出现1次;由于array_1中有两个0,因此累加两次,总和为3+2=5
total_count = 0
for r in array_1:
    total_count = total_count + array_2.count(r)
print("total sum: {0}".format(total_count))

这段脚本处理小数组的时候没问题,但当array_1和array_2的规模达到100万级时,性能就变得很差了。有没有更优的实现方案?


这问题我之前处理大数据量的时候也碰到过!原代码性能拉胯的核心原因是每次调用array_2.count(r)都要遍历整个array_2,如果array_1有100万元素,array_2也有100万,那时间复杂度就是O(n*m),相当于要做10^12次操作,肯定慢得离谱。

最优的思路是先给array_2做一次预统计,把每个元素的出现次数存到一个字典(或者专门的计数结构)里,之后遍历array_1的时候直接查表就行,这样时间复杂度就降到O(n+m),百万级数据处理起来毫无压力。

具体实现可以用Python标准库的collections.Counter,它专门用来做元素计数,代码如下:

from collections import Counter

array_1 = [1,2,0,5,7,0]
array_2 = [1,0,1,1,9,6]

# 先统计array_2中所有元素的出现次数,只需要遍历一次array_2
count_map = Counter(array_2)

total_count = 0
for r in array_1:
    # 直接查表,不存在的元素默认返回0,不用额外处理
    total_count += count_map.get(r, 0)

print("total sum: {0}".format(total_count))

如果不想引入标准库,自己用字典实现也很简单:

array_1 = [1,2,0,5,7,0]
array_2 = [1,0,1,1,9,6]

count_map = {}
for num in array_2:
    count_map[num] = count_map.get(num, 0) + 1

total_count = 0
for r in array_1:
    total_count += count_map.get(r, 0)

print("total sum: {0}".format(total_count))

这两种方案的核心都是预统计+查表,把重复遍历array_2的开销砍掉,百万级数据的处理速度会提升好几个数量级。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:49:30