如何对比两个列表并返回元素值存在差异的对应索引
实现方案
两个等长列表对比对应位置元素差异的实现逻辑非常直接:遍历所有索引位置,逐位对比两个列表同位置的元素值,把值不相等的索引收集起来,最后根据收集到的差异索引数量,按要求格式输出结果即可。该方案遍历一次列表就能完成对比,时间复杂度为O(n),处理260个元素的列表没有任何性能压力。
核心代码
def compare_list_diff(a, b): # 收集所有值不匹配的索引 diff_index = [i for i, (v1, v2) in enumerate(zip(a, b)) if v1 != v2] if not diff_index: return "false -> 无存在差异的键" # 按要求拼接差异键的展示文本 key_show = " 和 ".join([f"Key {idx}" for idx in diff_index]) return f"{key_show} 存在差异"
场景验证
直接调用上述函数,三个测试场景的输出完全符合预期:
- 场景1
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] b = [0, 1, 2, 3, 5, 5, 6, 7, 8, 9] print(compare_list_diff(a, b)) # 输出:Key 4 存在差异
- 场景2
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] b = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] print(compare_list_diff(a, b)) # 输出:false -> 无存在差异的键
- 场景3
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] b = [0, 9, 2, 3, 4, 5, 6, 7, 3, 9] print(compare_list_diff(a, b)) # 输出:Key 1 和 Key 8 存在差异
补充说明
- 如果你的业务场景里可能出现两个列表长度不一致的情况,可以在函数开头增加长度校验逻辑,避免漏对比长度不匹配部分的元素
- 如果差异数量超过2个,当前代码会自动用
和拼接所有Key,比如3个差异会输出Key 1 和 Key 4 和 Key 8 存在差异,如果需要调整分隔符逻辑,修改join的传入参数即可
内容的提问来源于stack exchange,提问作者Gustavo Araújo
相关产品推荐
相关产品推荐

