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

如何调整Python生成器函数,先输出原结果再输出转换结果?

修改生成器输出顺序的实现方案

原代码与输出

原函数实现如下:

import itertools as it

def test(x):
    for i in x:
        yield i
        i = list(i)
        i[1] = "X"
        yield tuple(i)

list(test(it.product(["A", "B"], ["C"])))

执行后输出:

[('A', 'C'), ('A', 'X'), ('B', 'C'), ('B', 'X')]

需求

需要修改test函数,让输出先包含输入生成器的所有原始结果,再依次输出转换后的结果,预期输出:

[('A', 'C'), ('B', 'C'), ('A', 'X'), ('B', 'X')]

修改后的代码

import itertools as it

def test(x):
    # 缓存输入生成器的所有结果,防止生成器迭代一次后耗尽
    original_results = list(x)
    # 先输出所有原始结果
    for item in original_results:
        yield item
    # 再遍历缓存的结果,生成并输出转换后的版本
    for item in original_results:
        modified = list(item)
        modified[1] = "X"
        yield tuple(modified)

print(list(test(it.product(["A", "B"], ["C"]))))

说明

因为it.product返回的是生成器对象,这类迭代器只能被遍历一次。所以我们需要先把所有原始结果存入列表缓存,先完成一轮原始结果的输出,再基于缓存的结果生成转换后的内容并输出,这样就能保证输出顺序符合要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 03:32:35