You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

循环赋值二维列表元素正常,循环后值异常的问题排查

问题分析与解决

你的问题核心是:循环内给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时的索引对应关系和赋值时不一致。

验证与解决步骤

  1. 排查重复赋值:在赋值时添加判断,仅当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]
    
  2. 即时验证结果:在嵌套循环结束后立即打印out_array,如果此时结果和循环内的打印一致,说明问题出在后续代码单元中,需要检查后续对out_array的操作。
  3. 确认索引稳定性:检查horiz_lines、vert_lines、ordered_boxes在整个流程中是否被修改,确保赋值时的索引和后续访问时的索引指向同一位置。

内容的提问来源于stack exchange,提问作者siddharth patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 06:43:11