如何避免列表分配时产生三重嵌套?RITMO算法程序求助
问题排查与解决方案:无人机任务列表三重嵌套异常
问题核心
任务列表从tasks转移到positions时出现不必要的三重嵌套结构(如[[[66, 81]], [[83, 41]]]),预期格式应为二维列表[..., [83,41], [66,81]]。
代码逻辑分析
- pointgen函数:生成的是符合预期的二维坐标列表
[[x1,y1], [x2,y2], ...],这部分逻辑无问题。 - break_list_into_sublists函数:将二维列表拆分为多个子列表,返回三维列表
[[[x1,y1], ...], [[x3,y3], ...]],这是为每个节点分配子任务的合理设计,本身不是异常根源。 - 节点初始化:通过
newPointlist[i-1]为每个Node传入子任务列表,问题大概率出在Node类的任务处理逻辑或任务跨节点移动的代码中。
排查与修复方向
1. 检查Node类的任务存储逻辑
确认Node初始化时,是否错误地将传入的子任务列表中的每个坐标点再次嵌套。例如:
- 错误写法:
self.positions.append([point]) - 正确写法:
self.positions.append(point)
2. 排查任务移动的核心代码
当执行任务从tasks到positions的转移操作时,检查是否对单个坐标点进行了多余的列表包裹。比如:
如果存在类似以下代码:
# 错误:给单个坐标点额外加了一层列表 for task in self.tasks: self.positions.append([task])
修改为:
# 正确:直接添加二维坐标点 for task in self.tasks: self.positions.append(task)
3. 优化pointgen函数(非必要,但提升效率)
原函数生成不重复随机数的方式效率较低,可替换为更简洁高效的实现:
import random def pointgen(numofp): # 生成numofp个不重复的x、y坐标 xs = random.sample(range(1, 101), numofp) ys = random.sample(range(1, 101), numofp) # 组合为二维坐标列表 return [list(coord) for coord in zip(xs, ys)]
内容的提问来源于stack exchange,提问作者user14232195
相关产品推荐
相关产品推荐

