Opencv 学习笔记:列表筛选(查找满足指定间距的数值)

在图像处理的数据分析场景(如坐标筛选、特征值过滤)中,常需从数值列表中筛选出满足指定间距的元素。本文通过极简代码演示如何查找列表中间距≥80 的数值,新手可快速复用至各类数据筛选场景。

核心代码实现

python 复制代码
# 原始数值列表(字符串类型,需转为整数计算)
num_list = ['1', '2', '8', '9', '12', '13', '16', '19', '33', '44', '55', '66', '88', '200']
# 初始化结果列表(深拷贝原始列表)
result_list = num_list.copy()

i = 0  # 基准元素索引
j = i  # 对比元素索引

# 遍历列表,筛选间距≥80的元素
while i < len(num_list):
    # 避免索引越界(最后一个元素无需对比)
    if i == len(num_list) - 1:
        break
    j = i  # 重置对比索引为基准索引
    while j < len(num_list) - 1:
        j += 1
        # 计算两个数值的绝对间距
        gap = abs(int(num_list[j]) - int(num_list[i]))
        if gap < 80:
            # 间距不足80,标记为待删除
            result_list[j] = None
        else:
            # 间距≥80,更新基准索引为当前对比索引
            i = j
            break

# 打印中间结果(含None标记)
print("标记后列表:", result_list)

# 移除所有None元素,得到最终结果
while None in result_list:
    result_list.remove(None)

# 打印最终筛选结果
print("筛选后列表:", result_list)

关键知识点解析

1. 核心逻辑拆解

步骤 操作说明 核心作用
类型转换 int(num_list[j]) 将字符串类型数值转为整数,才能进行数值计算
间距计算 abs(数值1 - 数值2) 取绝对值,避免正负间距影响判断
标记删除 result_list[j] = None 先标记不符合条件的元素,最后统一删除,避免遍历中修改列表导致索引异常
移除 None result_list.remove(None) 循环移除所有标记的元素,得到最终筛选结果

2. 避坑与优化技巧

  • 索引越界 :原代码中i == 13是硬编码,改为i == len(num_list) - 1,适配任意长度列表;

  • 列表拷贝 :使用num_list.copy()深拷贝,避免修改结果列表时影响原始列表;

  • 效率优化 :若列表过长(万级以上),可改用列表推导式替代循环移除 None:

    python 复制代码
    result_list = [x for x in result_list if x is not None]
  • 通用性改造 :封装为函数,支持自定义间距阈值:

    python 复制代码
    def filter_by_gap(num_list, min_gap):
        # 上述核心逻辑,将80替换为min_gap参数
        return result_list
    # 调用示例:筛选间距≥80的元素
    res = filter_by_gap(num_list, 80)

3. 适用场景

  • 图像处理:筛选图像特征点坐标(如角点、圆心),保留间距≥指定值的特征;
  • 数据清洗:过滤传感器采集的密集数值,仅保留间隔符合要求的数据点;
  • 目标检测:筛选检测框坐标,去除间距过近的重复框。

总结

  1. 数值列表筛选的核心是先标记后删除,避免遍历中修改列表导致索引异常;
  2. 字符串类型数值需先转为整数,才能进行间距计算;
  3. 硬编码索引(如 13)改为动态判断(len(num_list)-1),提升代码通用性。
相关推荐
傻小胖2 小时前
22.ETH-智能合约-北大肖臻老师客堂笔记
笔记·区块链·智能合约
1024小神2 小时前
SVG标签中path路径参数学习
学习
浅念-3 小时前
C++入门(2)
开发语言·c++·经验分享·笔记·学习
ZH15455891313 小时前
Flutter for OpenHarmony Python学习助手实战:面向对象编程实战的实现
python·学习·flutter
简佐义的博客3 小时前
生信入门进阶指南:学习顶级实验室多组学整合方案,构建肾脏细胞空间分子图谱
人工智能·学习
近津薪荼3 小时前
dfs专题4——二叉树的深搜(验证二叉搜索树)
c++·学习·算法·深度优先
rannn_1113 小时前
【苍穹外卖|Day4】套餐页面开发(新增套餐、分页查询、删除套餐、修改套餐、起售停售)
java·spring boot·后端·学习
张人玉4 小时前
VisionPro 定位与卡尺测量学习笔记
笔记·学习·计算机视觉·vsionprp
songyuc4 小时前
【BiFormer】BiFormer: Vision Transformer with Bi-Level Routing Attention 译读笔记
笔记·transformer
觉醒大王4 小时前
强女思维:着急,是贪欲外显的相。
java·论文阅读·笔记·深度学习·学习·自然语言处理·学习方法