Python列表分段并调用has_symptom判断数据状态的实现问题
代码问题修复
需求逻辑
需要实现的处理流程如下:
- 接收输入流量列表
flow_rate,将其切分为每段固定长度为segment_len的分段列表list_segmented - 遍历所有分段,将每个分段作为
data_segment传入已实现的has_symptom函数做特征判断 - 收集所有分段的判断结果,组成最终结果列表返回
原有代码问题
原代码存在两处核心错误:
- 缩进层级错误:Python靠缩进区分代码块层级,原代码中调用判断函数、追加结果的逻辑没有放在for循环的代码块内,循环结束后
data_segment仅保存最后一个分段的值,最终只能得到1条判断结果 - 缺失返回语句:所有计算完成后没有返回
disorder_status结果列表,外部调用函数拿不到处理结果
修复后完整代码
# 如果has_symptom定义在独立sym模块下,保留对应导入语句即可 # import sym def flow_rate_to_disorder_status(flow_rate,segment_len,interval,threshold): inlist = flow_rate[:] list_segmented = [] disorder_status = [] # 按固定长度切分输入列表 while inlist: list_segmented.append(inlist[0 : segment_len]) inlist[0 : segment_len] = [] # 遍历每个分段执行判断 for i in range(len(list_segmented)): data_segment = list_segmented[i] # 以下两行需放在循环体内,逐段处理 condition = has_symptom(data_segment, interval, threshold) disorder_status.append(condition) # 返回最终结果列表 return disorder_status def has_symptom(data_segment,interval,threshold): max_ratio = 1 # 区间内数据点占分段总长度的最大允许比值 # 示例场景下取值为1 # 注意:max_ratio 不能小于 threshold # 定义判断区间范围 min_interval = interval[0] max_interval = interval[1] # 存储落在区间内的数据点 symptom_yes = [] # 遍历分段内所有数据点,判断是否落在目标区间 for i in range(len(data_segment)): if min_interval <= data_segment[i] <= max_interval: symptom_yes.append(data_segment[i]) # 计算区间内数据点占总数据点的比例 fraction_ratio = len(symptom_yes) / len(data_segment) # 比例落在阈值到max_ratio区间内,判定为存在异常特征 if threshold <= fraction_ratio <= max_ratio: condition = True else: condition = False return condition
补充说明
- 原有的列表分段逻辑可以正常运行,无需修改
- 当前逻辑会自动保留长度不足
segment_len的尾段作为最后一个分段;如果需要丢弃长度不足的尾段,在切分完成后加一行长度判断过滤即可
内容的提问来源于stack exchange,提问作者Pete
相关产品推荐
相关产品推荐

