如何计算Python中二维数组中相同元素的个数?

How to calculate the number of same elements in 2D arrays in Python?

现在我有两个二维数组,我想比较一下

['A','B','E','G', 'T'] & ['A','C','E','N','M']
['a','f','c','h','u'] & ['a','b','c','y','l']

和计算相同的元素。

aaa = [['A','B','E','G','T'],['a','f','c','h','u']]
bbb = [['A','C','E','N','M'],['a','b','c','y','l']]

所以在这个例子中,输出是2+2

我知道如果是一维数组该怎么做,但不知道如何处理二维数组。非常感谢。

您可以使用 zip() 内置方法对元素进行配对:

aaa = [['A','B','E','G','T'],['a','f','c','h','u']]
bbb = [['A','C','E','N','M'],['a','b','c','y','l']]

c = sum(ii[0] == ii[1] for i in zip(aaa, bbb) for ii in zip(*i))
print(c)

打印:

4

编辑:如果您不关心元素的顺序,您可以使用集合:

aaa = [['A','E','C','G','T'], ['a','f','c','h','u']]
bbb = [['A','C','E','N','M'], ['a','b','c','y','l']]

c = sum(len(set(i1) & set(i2)) for i1, i2 in zip(aaa, bbb))
print(c)

打印(第一个数组 'A'、'E'、'C' 和第二个数组 'a'、'c' 中的公共元素):

5

您可以使用 itertools.chain 来扁平化列表的列表,并使用 zip 来配对那些扁平化列表的元素。

from itertools import chain

aaa = [['A','B','E','G','T'], ['a','f','c','h','u']]
bbb = [['A','C','E','N','M'], ['a','b','c','y','l']]

c = sum(a == b for a, b in zip(chain(*aaa), chain(*bbb)))

编辑:使用此方法时,您可能需要注意 aaabbb 具有相同的尺寸,因为以下代码将产生与上面相同的结果。

from itertools import chain

aaa = [['A','B','E','G'], ['T','a','f','c','h','u']]
bbb = [['A','C','E','N','M','a'], ['b','c','y','l']]

c = sum(a == b for a, b in zip(chain(*aaa), chain(*bbb)))