如何比较两个列表并返回它们在python中的每个索引匹配的次数?

时间:2017-04-10 16:03:08

标签: python list

我有两个包含1和0的列表,例如

list1 = [1,1,0,1,0,1]
list2 = [0,1,0,1,1,0]

我想查找每个索引匹配的次数。因此,在这种情况下,输出将为3,因为它们仅在索引1,2和3处具有相同的值。

目前我正在这样做:

matches_list = []
for i in list1:
   index = list[1].index(i)
   if list1[index] == list2[index]:
            mathes_list.append(i)
   else:
       pass
return len(matches_list)

然而,这非常缓慢,我想多次这样做以比较大量的这些列表

我希望有人能以更快的方式告诉我这件事。有没有办法使用set()函数或类似的东西,例如比较两个列表但保持每个列表的顺序?

3 个答案:

答案 0 :(得分:4)

zip列表,比较元素,计算总和。

>>> list1 = [1,1,0,1,0,1]
>>> list2 = [0,1,0,1,1,0]
>>> sum(a == b for a,b in zip(list1, list2))
3

(考虑在Python 2中使用itertools.izip来提高内存效率。)

答案 1 :(得分:1)

这是一个快速numpy答案:

myRange.AutoFilter Field:=1, Criteria1:="<>A", Operator:=xlAnd, Criteria2:="<>B", Operator:=xlAnd, Criteria3:="<>C"

numpy import numpy as np list1 = np.array([1,1,0,1,0,1]) list2 = np.array([0,1,0,1,1,0]) len(np.where(list1==list2)[0]) 函数将返回符合函数的列表对中的所有点的索引(在这种情况下,list1 = = list2 at indices [1,2,3])以及数据类型说明。在上面的例子中,我删除了索引数组并计算了np.where的数量。

答案 2 :(得分:0)

您可以将mapoperator.eqsum

一起使用
>>> import operator
>>> sum(map(operator.eq, list1, list2))

这是有效的,因为True在求和时被解释为1,False被解释为0

你也可以使用numpy

>>> import numpy as np
>>> np.count_nonzero(np.asarray(list1) == np.asarray(list2))