繁体   English   中英

如何计算一个列表中的元素与另一个列表完全匹配的次数-python

[英]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])

在这里,当您遍历list1enumerate函数会跟踪索引位置,并可用于在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM