python比较2个不同长度列表中的项目 - 顺序很重要

时间:2015-06-11 21:43:00

标签: python list loops for-loop indexing

list_1 = ['a', 'a', 'a', 'b']
list_2 = ['a', 'b', 'b', 'b', 'c']

所以在上面的列表中,只有索引0中的项目是相同的,而两个列表中的索引1到4是不同的。此外,list_2还有一个额外的项目'c'。 我想计算两个列表中的索引不同的次数,在这种情况下我应该得到3.

我试过这样做:

x = 0
for i in max(len(list_1),len(list_2)):
    if list_1[i]==list_2[i]:
        continue
    else:
        x+=1

我收到了错误消息。

6 个答案:

答案 0 :(得分:5)

使用zip() function配对列表,计算所有差异,然后添加长度差异。

$rowDb = $stmt2->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_NEXT); 只会遍历可以配对的项目,但迭代剩余部分几乎没有意义;你知道这些都被视为不同:

zip()

differences = sum(a != b for a, b in zip(list_1, list_2)) differences += abs(len(list_1) - len(list_2)) 总结sum()True个值;这是有效的,因为Python的False类型是boolean的子类,int等于False0等于True。因此,对于每个不同的元素对,1测试生成的True值加起来为!=

演示:

1

答案 1 :(得分:2)

你可以试试这个:

list1 = [1,2,3,5,7,8,23,24,25,32]
list2 = [5,3,4,21,201,51,4,5,9,12,32,23]

list3 = []

for i in range(len(list2)):
    if list2[i] not in list1:
        pass
    else :
        list3.append(list2[i])
print list3
print len(list3)

答案 2 :(得分:0)

ZdaR所述,如果您在列表中没有zip_longest,那么结果应为3,None可以提供帮助。

from itertools import zip_longest

list_1=['a', 'a', 'a', 'b']
list_2=['a', 'b', 'b', 'b', 'c']
x = sum(a != b for a,b in zip_longest(list_1,list_2))

答案 3 :(得分:0)

我可以尝试这种方式使用for循环:

>>> count = 0
>>> ls1 = ['a', 'a', 'a', 'b']
>>> ls2 = ['a', 'b', 'b', 'b', 'c']
>>> for i in range(0, max(len(ls1),len(ls2)), 1):
...     if ls1[i:i+1] != ls2[i:i+1]:
...         count += 1
...
>>> print count
3
>>>

答案 4 :(得分:0)

或试试这个(没有更改列表):

APIDataSource

(输出:dif = 0 for i in range(len(min(list_1, list_2))): if list_1[i]!=list_2[i]: dif+=1 #print(list_1[i], " != ", list_2[i], " --> Dif = ", dif) dif+=(len(max(list_1, list_2)) - len(min(list_1, list_2))) print("Difference = ", dif)

答案 5 :(得分:0)

不是更好,但这是另一种选择

if len(a) < len(b):
                b = b[0:len(a)]
            else:
                a = a[0:len(b)]

            correct = sum(a == b)