我想设计一个循环,它可以打印日期,格式为yyyy-mm,以4个月为增量,重叠2个月.我可以这样做一年,但我正在为如何将其延长到明年而苦苦挣扎,同时坚持4个月和2个月的重叠.

理想的结果应该是这样……

2020-01,2020-02,2020-03,2020-04,2020-03,2020-04,2020-05,2020-06,2020-05,2020-06,2020-07,2020-08,2020-07,2020-08,2020-09,2020-10,2020-09,2020-10,2020-11,2020-12,2020-11,2020-12,2021-01,2021-02,2021-01,2020-2,2020-3,2020-04

到目前为止,我已经完成了休耕,

for j in range(20,22):
    for k in range(0,13,3):
        for l in range(1,7):
            while (k+l <=12)
                print('20'+str(j)+'-'+str(k+l))
                break     

这在一年内运行良好,但它不会以我喜欢的方式延伸到下一年.

感谢您的任何意见.

推荐答案

使用Dateutil的relativedelta,你可以在date instance的基础上增加一个月.它比使用timedelta更容易,因为一个月的长度取决于它是哪个月.

from collections import deque
from datetime import date
from itertools import count

from dateutil.relativedelta import relativedelta  # pip install python-dateutil


def gen(start, n=4, overlap=2, limit=-1):
    month = relativedelta(months=1)
    initial = [start + i*month for i in range(n)]
    q = deque(initial, maxlen=n)
    for i in count():
        if i >= limit:
            break
        yield list(q)
        for _ in range(overlap):
            q.popleft()
            q.append(q[-1] + month)
>>> for chunk in gen(start=date(2020, 1, 1), limit=10):
...     print(", ".join([c.strftime("%Y-%m") for c in chunk]))
... 
2020-01, 2020-02, 2020-03, 2020-04
2020-03, 2020-04, 2020-05, 2020-06
2020-05, 2020-06, 2020-07, 2020-08
2020-07, 2020-08, 2020-09, 2020-10
2020-09, 2020-10, 2020-11, 2020-12
2020-11, 2020-12, 2021-01, 2021-02
2021-01, 2021-02, 2021-03, 2021-04
2021-03, 2021-04, 2021-05, 2021-06
2021-05, 2021-06, 2021-07, 2021-08
2021-07, 2021-08, 2021-09, 2021-10

Python相关问答推荐

连接两个具有不同标题的收件箱

为什么我的Python代码在if-else声明中的行之前执行if-else声明中的行?

Streamlit应用程序中的Plotly条形图中未正确显示Y轴刻度

Python+线程\TrocessPoolExecutor

如何使用Pandas DataFrame按日期和项目汇总计数作为列标题

Django RawSQL注释字段

Python Tkinter为特定样式调整所有ttkbootstrap或ttk Button填充的大小,适用于所有主题

未调用自定义JSON编码器

如何检测鼠标/键盘的空闲时间,而不是其他输入设备?

Numpyro AR(1)均值切换模型抽样不一致性

Python Mercury离线安装

如何在Gekko中处理跨矢量优化

多个矩阵的张量积

比较两个有条件的数据帧并删除所有不合格的数据帧

PYTHON中的pd.wide_to_long比较慢

在matplotlib中重叠极 map 以创建径向龙卷风图

Stats.ttest_ind:提取df值

按列表分组到新列中

Pandas:使列中的列表大小与另一列中的列表大小相同

如何删除剪裁圆的对角线的外部部分