Python对比两个嵌套列表返回首个有差异子列表并停止比对的实现问题
问题解决方法
错误原因
你现有代码的遍历顺序是先遍历参数位置,再遍历子列表索引,导致优先返回每个参数的首个差异,而非首个出现差异的子列表。同时你代码里还存在变量名拼写错误:定义的参数名列表是l_name,但打印时写的是l_par。
修正后的代码
l_name = ["TIME", "ALPHA", "BETA"] # 参数名列表 liste1 = [[1, 2, 3.0], [2,5.045,6.003], [3, 8.03, 9], [4, 10.5, 5.5]] liste2 = [[1, 2, 3.0], [2,5.045,6.005], [3, 8.0029, 9], [4, 10.5, 5.5555]] abs_tol = 0.00001 # 允许的误差阈值 def search_var_delta(): # 先按子列表顺序遍历,找到第一个有差异的子列表 for k in range(len(liste1)): # 遍历当前子列表的所有参数 for i in range(len(l_name)): a = liste1[k][i] b = liste2[k][i] diff = abs(a - b) if diff >= abs_tol: print("the delta : {}".format(diff), "the index : {}".format(k+1), "the parameter : {}".format(l_name[i])) # 找到第一个差异后直接返回,终止所有遍历 return search_var_delta()
输出结果
the delta : 0.002 the index : 2 the parameter : BETA
和你预期的输出完全匹配,遍历到第2个子列表时检测到BETA参数的差异,立刻终止所有后续比对操作。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

