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