我有两个包含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()函数或类似的东西,例如比较两个列表但保持每个列表的顺序?
答案 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)
您可以将map
与operator.eq
和sum
:
>>> 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))