2017-02-21 82 views
1

嘗試比較2個列表的相似度,以查看2個列表匹配的次數。如何比較2個相同長度列表中的確切列表元素?

我的代碼是這樣的:

list1 = [1,0,1,0,1,1,0,0] 
list2 = [1,0,0,1,0,0,1,1] 

def listCompare(lst1, lst2): 
    for i in lst1: 
     for j in lst2: 
      if i == j: 
       return i 

print(listCompare(L1, M1)) 

這應返回2,因爲只有第一和第二項(指數01)在兩個列表相等。

+1

但你'return' lst1'的'元素('i')... –

+4

'合計(== b對於A,B拉鍊(列表1,列表2))' –

+0

不要如果每個列表中的* i * th元素都相等,您只需要計數?你編碼的方式,它看起來像你試圖比較'lst1'中的每個元素與'lst2'中的*每個元素*。因此,對於'list1 [0]',根據您當前的標準,技術上'list2'中有四個元素與'list1 [0]'匹配。你明白我的意思嗎? – blacksite

回答

1

這個怎麼樣,

list1 = [1,0,1,0,1,1,0,0] 
list2 = [1,0,0,1,0,0,1,1] 

n = sum(i==j for i, j in zip(list1, list2)) 

print(n) 
# 2 
+0

@MSeifert,我更喜歡'operator'。無論如何,我剛剛提出了你的答案。 – SparkAndShine

+0

你已經用'zip'提出了一個好的和可靠的解決方案,所以實際上不需要複製一個解決方案。我不想粗魯,但是我的回答和你的更新之間有幾分鐘的時間(這會讓我的回答完全過時,特別是在你的回答被接受後)。 :) – MSeifert

+0

@MSeifert,是的,SO確實提醒我有新的答案,但我沒有檢查它,只是發佈我的編輯。下一次,我會仔細檢查它以確保我的編輯不會與其他人重複,或者一旦出現重複,就會與之前的答案相反。 – SparkAndShine

3

您可以映射operator.eq兩個列表,然後sum他們:

>>> import operator 
>>> sum(map(operator.eq, list1, list2)) 
2 

你相比,笛卡爾乘積(與list2每個項目的list1每個項目)不是元素相等。

1

我覺得你只是想:

list1 = [1,0,1,0,1,1,0,0] 
list2 = [1,0,0,1,0,0,1,1] 

def listCompare(lst1, lst2): 
    matches = 0 
    for i in range(0, len(lst1)): 
     if lst1[i] == lst2[i]: 
      matches += 1 
    return matches 

print(listCompare(list1, list2)) 

也就是說,只使用一個索引來遍歷兩個列表,並創建一個變量,名爲場比賽,算你找到匹配的數量。

0
def listCompare(lst1, lst2): 
    for i in lst1: 
     for j in lst2: 
      if i == j: 
       return i 

您的代碼將list1中的每個項目與list2中的所有項目進行比較。 您可以使用此代碼。

list1 = [1,0,1,0,1,1,0,0] 
list2 = [1,0,0,1,0,0,1,1] 

def listCompare(lst1, lst2): 
    i=0 
    counter=0 
    for j in lst1: 
     if lst1[i]==lst2[i]: 
      counter+=1 
      i+=1 
     else: 
      i+=1 
    return counter 

print(listCompare(list1,list2))