Python带k、l索引的嵌套循环print无输出,即便坐标列表已存值的成因排查
循环无输出的根本原因
核心问题是Python中可变列表的引用传递特性,导致存储的内容被意外清空
故障完整逻辑
- 代码全程复用同一个列表
xy存储临时计算得到的坐标 - 执行
polygonCoordinatesInEPSG25832.append(xy)时,存入外层列表的不是当前xy内元素的值副本,而是xy这个列表对象本身的引用 - append操作结束后立即执行的
xy.clear(),会直接清空所有通过引用关联到该对象的列表内容——因为外层列表中所有存入的子项,本质上都指向同一个被反复清空、复用的xy对象
与观测现象的匹配关系
- 你在
xy.clear()之前打印的子列表长度、坐标内容均显示正常,这是你判定polygonCoordinatesInEPSG25832存有有效数据的原因:这些打印操作发生在clear动作之前,此时被引用的列表内容尚未被清空 - 当所有外层i循环执行完毕后,
polygonCoordinatesInEPSG25832的所有子项都是经过clear操作的空列表 - 后续k层循环遍历每个子项时,获取的子列表长度为0,因此内层l层循环的迭代范围为空,根本不会进入循环体,自然不会触发内部的打印语句
修复方式
- 向外层列表添加元素时,传入
xy的内容副本,而非原对象引用,将原有append代码:polygonCoordinatesInEPSG25832.append(xy)
修改为:polygonCoordinatesInEPSG25832.append(xy.copy()) - 也可以移除全局复用的
xy列表,每次进入i层循环时重新初始化一个新的空列表,从根源上避免同一对象的引用污染
内容的提问来源于stack exchange,提问作者Amrmsmb
相关产品推荐
相关产品推荐

