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

Python中len(list(results))为何出现32==0的异常判断结果?

问题原因与解决方案

核心原因

pyautogui.locateAllOnScreen()返回的是生成器对象,而非普通列表。生成器的关键特性是:只能被迭代一次。当你第一次调用list(results)时,会遍历整个生成器,把所有元素取出转成列表,此时生成器内部的迭代指针已经走到末尾,后续再尝试遍历它,不会产生任何元素,得到的就是空列表。

代码逐行分析

  • 第一行print(len(list(results))):遍历生成器,取出所有32个匹配结果转成列表,输出长度32,同时生成器被彻底耗尽。
  • 第二行print(len(list(results)) == 0):此时生成器已经没有元素可迭代,转成的列表是空的,长度为0,所以比较结果返回True。
  • 第三行的判断条件因此成立,触发break退出循环。

修复方案

只需要把生成器提前转换为列表并保存,后续操作都基于这个保存好的列表,避免反复消耗生成器:

while not stop:
    # 提前将生成器转为列表并存储
    results = list(pyautogui.locateAllOnScreen('background data/test.png', confidence = 0.9))
    print(len(results))
    print(len(results) == 0)
    if len(results) == 0:
        print('exit loop')
        break

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 15:42:03