我有两个列表,想要计算列表中元素完全匹配的次数和与另一个列表位于同一位置。例如:
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
这可以比较第一个元素,但我不确定如何让它跟踪所有元素。有什么提示吗?
答案 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