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

jxn*_*jxn 3 python indexing loops for-loop list

list_1 = ['a', 'a', 'a', 'b']
list_2 = ['a', 'b', 'b', 'b', 'c']
Run Code Online (Sandbox Code Playgroud)

所以在上面的列表中,只有索引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
Run Code Online (Sandbox Code Playgroud)

我收到了一个错误.

Mar*_*ers 5

使用该zip()功能配对列表,计算所有差异,然后添加长度差异.

zip()只会迭代可以配对的项目,但迭代余数没有什么意义; 你知道这些都算不同了:

differences = sum(a != b for a, b in zip(list_1, list_2))
differences += abs(len(list_1) - len(list_2))
Run Code Online (Sandbox Code Playgroud)

sum()总结了TrueFalse值; 这个作品,因为Python的boolean类型的子类intFalse等于0,True等于1.因此,对于每个不同的元素对,测试True产生的值!=加起来为1s.

演示:

>>> list_1 = ['a', 'a', 'a', 'b']
>>> list_2 = ['a', 'b', 'b', 'b', 'c']
>>> sum(a != b for a, b in zip(list_1, list_2))
2
>>> abs(len(list_1) - len(list_2))
1
>>> difference = sum(a != b for a, b in zip(list_1, list_2))
>>> difference += abs(len(list_1) - len(list_2))
>>> difference
3
Run Code Online (Sandbox Code Playgroud)