Python二维数组无法在子数组头部插入元素问题排查
问题原因及解决办法
嗨,这个问题我太熟啦!咱们先聊聊为啥插入操作没生效:
在你的循环里,for box in boxes: 中的box其实是原列表里子数组的临时引用变量。当你执行 box = [float(1)] + box 时,你并没有修改原列表里的那个子数组——你只是创建了一个全新的列表,然后让这个临时的box变量指向了这个新列表而已。原boxes列表里的子数组根本没被碰过,所以你看不到变化。
那怎么改呢?给你两种靠谱的方案:
方案1:通过索引直接修改原列表
直接遍历boxes的索引,这样就能直接操作原列表里的元素:
def normalizeBox(self, boxes, x_, y_, addProbability): for i in range(len(boxes)): box = boxes[i] box[0] *= x_ box[1] *= y_ box[2] *= x_ box[3] *= y_ if addProbability: boxes[i] = [float(1)] + box
方案2:用列表的insert方法原地修改
既然box是原数组的引用,那我们可以用列表的insert方法直接在原数组头部插入元素,这个方法是原地修改的,不会创建新列表:
def normalizeBox(self, boxes, x_, y_, addProbability): for box in boxes: box[0] *= x_ box[1] *= y_ box[2] *= x_ box[3] *= y_ if addProbability: box.insert(0, float(1))
这两种方法都能达到你想要的效果,选哪种看你习惯~
内容的提问来源于stack exchange,提问作者jejjejd
相关产品推荐
相关产品推荐

