【问题标题】:How to calculate the number of same elements in 2D arrays in Python? [closed]如何在 Python 中计算二维数组中相同元素的数量? [关闭]
【发布时间】:2019-07-19 15:17:24
【问题描述】:

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

['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

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

【问题讨论】:

  • 这些是列表
  • 我已经编辑了我的标题,不知道为什么它仍然被搁置..

标签: python arrays sum checksum


【解决方案1】:

您可以使用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

【讨论】:

  • 嗨 Andrej,如果我不关心元素的顺序,只关心相互的元素怎么办?例如 aaa = [['A','E','C','G','T'], bbb = [['A','C','E','N','M '],有3个互元素,但是输出不是3
  • @Cecilia 查看我的更新答案
【解决方案2】:

您可以使用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)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多