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
相关产品推荐
相关产品推荐

