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

Python生成器批量输出异常:遗漏数据与末尾批次问题排查

批量生成器遗漏数据的修复方案

你的批量生成器存在两个核心问题,导致输出异常并遗漏数据:

  • 元素处理顺序错误:当前逻辑会跳过部分元素的批次添加操作,导致元素遗漏
  • 未处理剩余元素:循环结束后,列表中剩余的不足一个批次的元素未被输出

错误原因分析

以batch_size=3为例,处理第4个元素(ans=4)时,此时res已经是[1,2,3](长度等于batch_size),代码会直接yield该列表并重置res,但当前的ans=4没有被添加到新批次中,直接进入下一次循环处理下一个元素,导致ans=4被遗漏。同时,循环结束后剩余的[6,7]也没有被yield出来。

修复后的代码

import itertools

def compute_add_generator_batch(batch_size):
    data = range(5)
    cases = list(itertools.permutations(data, 2))
    print(f"{cases=}")

    res = []
    for x, y in cases:
        ans = x + y
        # 先判断批次是否已满,满则输出并重置
        if len(res) == batch_size:
            yield res
            res = []
        # 将当前元素加入批次
        res.append(ans)
    # 循环结束后,输出剩余的不足一个批次的元素
    if res:
        yield res

batch_size=3
for res in compute_add_generator_batch(batch_size):
    print(f"{res=}")

修复说明

  1. 调整处理顺序:先检查批次是否已满,满则输出并重置,再添加当前元素,确保每个元素都被正确加入批次
  2. 补充剩余元素处理:循环结束后判断res是否为空,若不为空则输出剩余元素,避免遗漏最后一批数据

预期输出

cases=[(0, 1), (0, 2), (0, 3), (0, 4), (1, 0), (1, 2), (1, 3), (1, 4), (2, 0), (2, 1), (2, 3), (2, 4), (3, 0), (3, 1), (3, 2), (3, 4), (4, 0), (4, 1), (4, 2), (4, 3)]
res=[1, 2, 3]
res=[4, 1, 3]
res=[4, 5, 2]
res=[3, 5, 6]
res=[3, 4, 5]
res=[7, 4, 5]
res=[6, 7]

内容的提问来源于stack exchange,提问作者winter

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 22:55:40