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

PyScript不支持生成器,如何不使用next()遍历列表获取目标元素

可直接在PyScript运行的替代实现

PyScript暂不支持生成器表达式,直接用基础Python语法实现相同逻辑即可,不需要依赖生成器特性,以下两种写法运行效果和你原有代码完全一致。

写法1:基础for循环(兼容性最高,推荐)

使用最通用的Python基础语法,无任何环境兼容问题:

next_rubbish_day = None
for day in current_month_list:
    if day > todays_date.day:
        next_rubbish_day = day
        break

代码会按顺序遍历已排序的周一日期列表,找到第一个大于当日日期的数值就立刻终止循环赋值,比如当日为16号时会正确返回20,和你之前的next()加生成器的运行结果完全相同。

写法2:列表推导式(写法更简洁)

PyScript支持列表推导语法,不会触发生成器相关报错,代码更简短:

# 过滤出所有晚于当日的周一日期,取第一个符合要求的值
valid_days = [day for day in current_month_list if day > todays_date.day]
next_rubbish_day = valid_days[0]

补充说明

以上两种写法和你原代码的依赖前提一致:

  • 要求current_month_list内的日期按从小到大顺序排列,你当前动态生成的列表本身符合该要求,无需额外排序
  • 若当月已无剩余周一(比如当月最后一个周一是27号,当日为28号),原代码会抛出StopIteration错误,上述写法也会对应出现变量为None或列表索引越界问题,可根据业务需求补充跨月处理逻辑,参考示例:
next_rubbish_day = None
for day in current_month_list:
    if day > todays_date.day:
        next_rubbish_day = day
        break

# 当月无剩余周一时,替换为你自己的跨月计算逻辑
if next_rubbish_day is None:
    next_rubbish_day = "下月第一个周一"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 05:21:23