Я настоятельно рекомендую вам использовать модуль dateutils
для получения таких повторяющихся дат. Вы можете установить его с помощью cmd pip install python-dateutil
>>> from dateutil.rrule import rrule, MONTHLY
>>>
>>> start=date(2017,4,1)
>>> end=(datetime.date.today().replace(day=1)) - datetime.timedelta(days=1)
>>> res = list(d.strftime("%Y-%m-%d") for d in rrule(dtstart=start, until=end, freq=MONTHLY))
>>> pprint(res)
['2017-04-01',
'2017-05-01',
'2017-06-01',
'2017-07-01',
'2017-08-01',
'2017-09-01',
'2017-10-01',
'2017-11-01',
'2017-12-01',
'2018-01-01',
'2018-02-01',
'2018-03-01',
'2018-04-01',
'2018-05-01',
'2018-06-01',
'2018-07-01',
'2018-08-01',
'2018-09-01',
'2018-10-01',
'2018-11-01',
'2018-12-01',
'2019-01-01',
'2019-02-01',
'2019-03-01',
'2019-04-01',
'2019-05-01',
'2019-06-01',
'2019-07-01',
'2019-08-01',
'2019-09-01',
'2019-10-01',
'2019-11-01',
'2019-12-01',
'2020-01-01',
'2020-02-01',
'2020-03-01',
'2020-04-01',
'2020-05-01',
'2020-06-01',
'2020-07-01']