遍历cv2.KeyPoint列表删除元素后过滤结果不符合预期如何解决
问题原因
你遇到的问题是遍历列表的同时直接删除列表元素导致的索引错位。
当你正向遍历列表时,每次删除一个元素,列表长度会自动减1,位于被删元素后方的所有元素会统一向前移动一位,遍历指针却还是照常向后移动,就会跳过紧邻被删元素的下一个元素,最终导致大量符合删除条件的元素没有被遍历到,自然也不会被删除。
解决方案
- 方案1:使用列表推导式生成新的过滤后列表(最推荐,代码简洁效率高)
keypoints = [key for key in keypoints if key.size <= 50]
- 方案2:如果必须修改原列表,改为倒序遍历后删除
for i in range(len(keypoints)-1, -1, -1): if keypoints[i].size > 50: keypoints.pop(i)
两种写法都可以得到符合预期的过滤结果,过滤后列表长度会和你统计的小于50的元素数量匹配。
内容的提问来源于stack exchange,提问作者Itay Nega
相关产品推荐
相关产品推荐

