如何在Python中计算二维数组对应行的相同元素数量?
处理二维数组对应子数组的相同元素统计
嘿,我明白你的需求啦!既然你已经搞定一维数组的相同元素统计,那二维的其实就是在一维逻辑上套一层循环而已,超级好上手~
第一步:复用你已掌握的一维数组统计逻辑
先把你会的一维统计写成一个可复用的小函数,比如用集合求交集的方式(如果你的数组里没有重复元素,这种方法最简洁):
def count_common_elements(arr1, arr2): # 用集合求交集,再返回交集的长度 return len(set(arr1) & set(arr2))
如果你的数组里可能有重复元素(比如同一个元素出现多次,需要统计重复次数的交集),那可以调整成用计数器的方式:
from collections import Counter def count_common_elements(arr1, arr2): counter1 = Counter(arr1) counter2 = Counter(arr2) # 遍历两个计数器的共同键,取最小出现次数相加 return sum(min(counter1[key], counter2[key]) for key in counter1 if key in counter2)
第二步:扩展到二维数组的处理
现在只需要遍历两个二维数组的对应位置的子数组,逐个调用上面的函数,最后把结果加起来就行。用zip()函数可以很方便地把两个二维数组里的子数组一一配对:
aaa = [['A','B','E','G','T'],['a','f','c','h','u']] bbb = [['A','C','E','N','M'],['a','b','c','y','l']] # 计算每组子数组的相同元素数,再求和 total = sum(count_common_elements(arr_a, arr_b) for arr_a, arr_b in zip(aaa, bbb)) print(total) # 输出:4,也就是你说的2+2
简单解释一下
zip(aaa, bbb)会把aaa里的第一个子数组和bbb里的第一个子数组配对,第二个和第二个配对,正好符合你“对应位置逐一对比”的需求。- 我们把每一对子数组传入统计函数,得到每组的相同元素数,最后用
sum()把所有组的结果加起来,就得到最终的总和啦。
这样是不是就清晰多了?本质就是把二维问题拆解成你已经会的一维问题,然后循环处理每一组就行~
内容的提问来源于stack exchange,提问作者Cecilia
相关产品推荐
相关产品推荐

