如何遍历measurements_list列表实现样本筛选与拒绝统计?
实验数据样本筛选的几种Python实现方案
需求说明
给定整数列表measurements_list(实验数据样本),遍历每个元素:
- 若元素值 ≤40,输出
Sample {索引} is accepted - 若元素值 >40,递增计数器
num_rejected,并输出Sample {索引} is rejected
方案1:基础for循环+enumerate获取索引
这是最直观的入门写法,逻辑清晰易读:
measurements_list = [35, 42, 38, 50, 40] num_rejected = 0 for idx, value in enumerate(measurements_list): if value <= 40: print(f"Sample {idx} is accepted") else: num_rejected += 1 print(f"Sample {idx} is rejected") print(f"Total rejected samples: {num_rejected}")
特点:
- 无需手动维护索引,
enumerate直接返回索引与对应元素 - 代码直白,调试成本低,适合新手理解和日常小数据量场景
方案2:while循环手动控制索引
如果需要自定义索引变化逻辑(比如跳步、动态调整索引),可以用while循环:
measurements_list = [35, 42, 38, 50, 40] num_rejected = 0 idx = 0 while idx < len(measurements_list): value = measurements_list[idx] if value <= 40: print(f"Sample {idx} is accepted") else: num_rejected += 1 print(f"Sample {idx} is rejected") idx += 1 print(f"Total rejected samples: {num_rejected}")
特点:
- 完全手动控制索引,灵活性更高
- 需要注意索引越界问题,代码量略多于for循环,适合特殊索引控制场景
方案3:列表推导式+分离状态与输出
将状态计算和输出逻辑分离,适合需要复用样本状态的场景:
measurements_list = [35, 42, 38, 50, 40] # 先批量生成(索引, 是否通过)的状态列表 sample_status = [(idx, value <= 40) for idx, value in enumerate(measurements_list)] # 统计拒绝数量 num_rejected = len([status for idx, status in sample_status if not status]) # 遍历输出结果 for idx, is_accepted in sample_status: print(f"Sample {idx} is {'accepted' if is_accepted else 'rejected'}") print(f"Total rejected samples: {num_rejected}")
特点:
- 逻辑模块化,状态结果可重复使用(比如后续需要基于状态做其他分析)
- 会额外占用少量内存存储状态列表,数据量小时可忽略
方案4:生成器处理大数据量
如果处理的样本量极大,不想占用过多内存,用生成器逐个处理:
def process_samples(measurements): num_rejected = 0 for idx, value in enumerate(measurements): if value <= 40: yield idx, "accepted" else: num_rejected += 1 yield idx, "rejected" # 最后返回统计结果 yield "total_rejected", num_rejected measurements_list = [35, 42, 38, 50, 40] for item in process_samples(measurements_list): if isinstance(item[0], str): print(f"Total {item[0]}: {item[1]}") else: print(f"Sample {item[0]} is {item[1]}")
特点:
- 生成器逐个产出结果,不会一次性加载所有数据到内存,适合超大数据集
- 代码封装性强,可作为独立函数复用
内容的提问来源于stack exchange,提问作者Erica
相关产品推荐
相关产品推荐

