You need to enable JavaScript to run this app. Python中判断generator生成器是否为空的最佳方法
优惠活动
大模型
产品
解决方案
定价
更多

Python中判断generator生成器是否为空的最佳方法

Python生成器判断是否包含元素的实现方法

生成器属于一次性迭代器,没有预计算的长度,所以无法直接使用len()获取长度,针对不同使用场景有两种常见实现方案:

场景1:仅判断是否存在元素,不需要后续使用生成器内容

你当前的代码就属于这个场景,直接使用内置函数any()即可,any()会迭代生成器直到找到第一个真值就停止返回,不会遍历全部内容,性能最优。
修改后的代码如下:

name = 'john'
while True:
    n = (x for x in names if x['name'] == name) # 生成器
    if any(n): # 替换原有len判断,逻辑完全匹配需求
        break
    name = input('Enter name > ')

场景2:判断非空后还需要继续使用生成器的所有元素

如果后续还要遍历生成器的内容,需要把判断时取出的第一个元素和剩余元素拼接,避免元素丢失,可以封装为工具函数使用:

import itertools

def check_generator_nonempty(g):
    try:
        first_element = next(g)
    except StopIteration:
        # 生成器为空
        return False, g
    # 把第一个元素和剩余生成器内容拼接,返回完整的迭代器
    return True, itertools.chain([first_element], g)

# 调用示例
name = 'john'
while True:
    n = (x for x in names if x['name'] == name)
    has_element, n = check_generator_nonempty(n)
    if has_element:
        # 这里可以正常遍历n,不会丢失第一个匹配的元素
        for item in n:
            print(item)
        break
    name = input('Enter name > ')

注意:不要直接将生成器转为列表再用len()判断,当匹配的元素数量很大时会占用大量内存,性能远低于上面两种方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 07:06:03