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

标签 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

我遇到了一个错误。

最佳答案

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

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

differences = sum(a != b for a, b in zip(list_1, list_2))
differences += abs(len(list_1) - len(list_2))

sum() 求和 TrueFalse 值;这是可行的,因为 Python 的 boolean 类型是 int 的子类,而 False 等于 0True 等于 1。因此,对于每对不同的元素,!= 测试生成的 True 值加起来为 1

演示:

>>> 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

关于python比较2个不同长度列表中的项目-顺序很重要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30791974/

相关文章:

java - 为什么我收到错误?

C++ Builder 2009 - 简单的整数列表

mysql - 迭代日期 Mysql 循环

python - 迭代列表并将输出存储在新列表中的更好方法

Python-从长度不等的列表列表中获取所有唯一组合并进行替换

java - Android从python服务器中的套接字接收消息

Python 抓取和读取带有请求的加密返回

python - 负向先行匹配

java - 如何使用循环跳转到两个数字之间距离相等的位置

python - 在python中自动添加字符串内的引号