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

时间:2016-12-06 19:45:18

标签: python list function

我有两个列表,想要计算列表中元素完全匹配的次数与另一个列表位于同一位置。例如:

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

这可以比较第一个元素,但我不确定如何让它跟踪所有元素。有什么提示吗?

3 个答案:

答案 0 :(得分:1)

您可以使用len()来列表推导并计算list2中存在的list1元素的数量:

return count

您自己的代码也正常工作,您只需返回计数(并将参数的输入正确更改为list2):

{{1}}

答案 1 :(得分:1)

为了完整起见,我将使用内置的zip提出答案,因此@LMc提供的最后一个答案可以改写为:

def corrpos(list1, list2):
    count = 0
    for elem1, elem2 in zip(list1, list2):
        if elem1 == elem2:
            count += 1
    return count

它并没有真正提供更多东西,但是zip允许你在两个迭代中“同时”迭代,我想这个方法比使用来自的元素的索引更直观第一个列表,用于选择第二个列表中的那个,如enumerate的示例所示。

当然,它也可以像其他答案一样重写为oneliner:

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

答案 2 :(得分:0)

另一种方法是使用集合查看这两个列表的交集:

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

此处enumerate函数会在您遍历list1时跟踪索引位置,并可用于在list2中查找相应的值。

如果您想使用for循环,可将其重写为:

def corrpos(list1,list2):
    count=0
    for (c,i) in enumerate(list1):
        if list2[c]==i: count+=1
    return count