首页 > 解决方案 > 求生成器的长度或是否有元素

问题描述

您好,我有如下代码:

isEmpty = True
for itrat in  generator():
    isEmpty = False
    break
if isEmpty:
    doSomething()
else:
    dosomethingelse()

测试我在Generator中是否有 One 或 mode 元素,或者如果生成器长度 > 0做某事,但我想要一个更清晰的代码来显示我们的Generator 是否有元素,我不需要获取生成器结果的所有值,只要知道它有元素吗?

生成器没有长度: 生成器 len 错误

标签: pythoniteratoriterationgenerator

解决方案


如果不消耗至少一项,就无法确定通用迭代器是否为空。一种解决方法可以按照以下方式进行:

from itertools import chain

def empty_check(gen):
    try:
        x = next(gen)
        return chain([x], gen), False
    except StopIteration:
        return gen, True

gen, empty = empty_check(generator())
if empty:
    # do something 
else:
    # do something else with still complete gen

推荐阅读