2024-04-17 22:01:01 发布
网友
我有两个包含1和0的列表
list1 = [1,1,0,1,0,1] list2 = [0,1,0,1,1,0]
我想找出它们在每个索引上匹配的次数。所以在这个例子中,输出是3,因为它们只有在指数1、2和3处有相同的值。在
目前我正在做这个:
然而,这是非常缓慢的,我想这样做多次,以比较大量的这些名单
我希望有人能给我一个更快的建议。有没有一种方法可以使用set()函数或类似的方法,例如比较两个列表,但保持每个列表的顺序?在
zip列表,比较元素,计算和。在
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
(考虑在Python2中使用itertools.izip来提高内存效率。)
itertools.izip
您可以将map与operator.eq和sum一起使用:
map
operator.eq
sum
>>> import operator >>> sum(map(operator.eq, list1, list2))
这是因为True在求和时被解释为1,False与{}相似。在
True
False
您也可以使用numpy来完成此操作:
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])
numpynp.where函数将返回符合函数的列表对中所有点的索引(在本例中,list1==list2 at index[1,2,3]),同时返回数据类型描述。在上面的例子中,我去掉索引数组并用len()计算索引的数量。在
np.where
len()
zip
列表,比较元素,计算和。在(考虑在Python2中使用
itertools.izip
来提高内存效率。)您可以将
map
与operator.eq
和sum
一起使用:这是因为}相似。在
True
在求和时被解释为1,False
与{您也可以使用
^{pr2}$numpy
来完成此操作:下面是一个闪电般快速的答案:
numpy
np.where
函数将返回符合函数的列表对中所有点的索引(在本例中,list1==list2 at index[1,2,3]),同时返回数据类型描述。在上面的例子中,我去掉索引数组并用len()
计算索引的数量。在相关问题 更多 >
编程相关推荐