2017-02-21 52 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))