[英]How do I count how many times element in a list are an exact match of another list - python
我有两个列表,并且想要计算一个列表中的元素完全匹配并且与另一个列表处于相同位置的次数。 因此,例如:
list1 = [1,2,3,4]
list2 = [1,2,4,3]
将返回2。我有以下代码:
count = 0
def corrpos(list1, list2, count):
if list1[0] == list2[0]:
count = 1
return count
这可以比较第一个元素,但是我不确定如何跟踪所有元素。 有小费吗?
您可以使用len()进行列表理解并计算list2中存在的list1元素的数量:
print len([x for x in list1 if x in list2])
您自己的代码也可以正常工作,您只需要返回count(并将参数的输入正确更改为list2):
return count
为了完整起见,我将使用内置的zip
提出一个答案,因此@LMc提供的最后一个答案可以重写为:
def corrpos(list1, list2):
count = 0
for elem1, elem2 in zip(list1, list2):
if elem1 == elem2:
count += 1
return count
它并没有真正提供更多功能,但是zip
允许您在两个可迭代对象上“同时”进行迭代,而且我猜这种方法比使用第一个列表中的元素索引从中选择元素更直观。第二个列表,如带有enumerate
的示例。
当然,也可以像其他答案中那样将其重写为一个单行代码:
def corrpos(list1, list2):
return sum(1 for elem1, elem2 in zip(list1, list2) if elem1 == elem2)
要么
def corrpos(list1, list2):
return len([True for elem1, elem2 in zip(list1, list2) if elem1 == elem2])
您可以执行此操作的另一种方法是使用集合查看这两个列表的交集:
>>>set(list1) & set(list2)
set([1, 2, 3, 4])
然后,您可以使用len
函数来获取计数:
>>>len(set(list1) & set(list2))
4
更新:
鉴于元素必须位于相同的索引位置,因此我将使用列表理解:
def corrpos(list1,list2):
return len([i for (c,i) in enumerate(list1) if list2[c]==i])
在这里,当您遍历list1
, enumerate
函数会跟踪索引位置,并可用于在list2
查找相应的值。
如果要使用for
循环,可以将其重写为:
def corrpos(list1,list2):
count=0
for (c,i) in enumerate(list1):
if list2[c]==i: count+=1
return count
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.