You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何遍历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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 00:52:47