循环赋值二维列表元素正常,循环后值异常的问题排查
问题分析与解决
你的问题核心是:循环内给out_array[i][j]赋值后打印正常,但后续访问时值不符。结合你的代码和out_array的创建方式,可能的原因及解决方向如下:
可能的错误原因
- 同一位置被多次覆盖:你的内层
for b in range(len(boxes))循环中,如果多个b对应的iou(resultant,the_box)都大于0.1,那么out_array[i][j]会被最后一个满足条件的texts[b]覆盖。循环内打印的是某次赋值后的结果,但最终存储的是最后一次的值,导致后续查看时和之前的打印结果不一致。 - 后续代码修改了
out_array:检查循环之后的代码单元,是否存在对out_array重新赋值、修改元素的操作,比如额外的循环遍历修改,或者不小心覆盖了索引位置的值。 - 索引逻辑存在隐错:确认
vert_lines[ordered_boxes[j]]的索引是否正确,或者horiz_lines、vert_lines、ordered_boxes在后续代码中是否被修改,导致你后续访问out_array时的索引对应关系和赋值时不一致。
验证与解决步骤
- 排查重复赋值:在赋值时添加判断,仅当
out_array[i][j]为空时才赋值,避免被后续满足条件的b覆盖:
同时可以打印每个满足条件的if iou(resultant,the_box)>0.1 and not out_array[i][j]: out_array[i][j]=texts[b] print(out_array[i][j])b值,确认是否存在同一位置多次赋值的情况:if iou(resultant,the_box)>0.1: print(f"i={i}, j={j}, b={b}, text={texts[b]}") out_array[i][j]=texts[b] - 即时验证结果:在嵌套循环结束后立即打印
out_array,如果此时结果和循环内的打印一致,说明问题出在后续代码单元中,需要检查后续对out_array的操作。 - 确认索引稳定性:检查
horiz_lines、vert_lines、ordered_boxes在整个流程中是否被修改,确保赋值时的索引和后续访问时的索引指向同一位置。
内容的提问来源于stack exchange,提问作者siddharth patel
相关产品推荐
相关产品推荐

