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

Python如何在if条件满足时暂存迭代值并保持后续逻辑序列正常执行

问题根本原因

Python中for i in range(xxx)的循环变量i由range迭代器统一赋值,每次循环开始时会自动取下一个序列值覆盖循环体内的修改,所以你在循环里给i减1只能影响当前轮次的输出,下一轮还是会按原有节奏递增,这就是你第一个示例代码输出不符合预期的核心原因。

日期场景解决方案

你的实际需求是碰到闰年2月29日时,对应的迭代编号i和次日(2月28日)的i保持一致,同时保证i、日期、关联数据集的对应关系正确,可改用手动控制迭代变量的while循环实现,完全避免for循环的自动赋值问题:

from datetime import date, timedelta

sDate = date(2021,7,24)
eDate = date(2016,1, 1)

current_date = sDate
i = 0
# 按日期倒序遍历,直到到达结束日期
while current_date >= eDate:
    # 这里可以加你对应i的数据集处理逻辑,i和当前日期完全对应
    print(i, current_date)
    # 闰年判断:兼容整百年规则,如果你业务场景不需要可以简化为 year%4==0
    is_leap = (current_date.year % 4 == 0 and current_date.year % 100 != 0) or (current_date.year % 400 == 0)
    # 只有当前日期不是闰年2月29日时,才递增迭代编号i
    if not (current_date.day == 29 and current_date.month == 2 and is_leap):
        i += 1
    # 日期往前推一天
    current_date = current_date - timedelta(days=1)

输出效果验证

改后输出会完全符合你的预期,不会出现日期重复问题,闰年2月的对应输出如下:

...
510 2020-03-01
511 2020-02-29
511 2020-02-28
512 2020-02-27
...
1971 2016-03-01
1972 2016-02-29
1972 2016-02-28
1973 2016-02-27
...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:06:04