Я получил очень простую вещь в Python:
Мне нужен список кортежей (year,month)
за последние x месяцев, начиная (и включая) с сегодняшнего дня. Таким образом, для x = 10 и сегодня (июль 2011 г.) команда должна вывести:
[(2011, 7), (2011, 6), (2011, 5), (2011, 4), (2011, 3),
(2011, 2), (2011, 1), (2010, 12), (2010, 11), (2010, 10)]
Следует использовать только реализацию Python по умолчанию для даты и времени. Я придумал следующее решение:
import datetime
[(d.year, d.month) for d in [datetime.date.today()-datetime.timedelta(weeks=4*i) for i in range(0,10)]]
Это решение выводит правильное решение для моих тестовых случаев, но мне не нравится это решение: оно предполагает, что у месяца есть четыре недели, и это просто не соответствует действительности. Я мог бы заменить weeks=4
на days=30
, что сделало бы лучшее решение, но это все еще не правильно.
Другое решение, которое пришло мне в голову, состоит в том, чтобы использовать простую математику и вычесть 1 из счетчика месяцев, а если счетчик месяцев равен 0, вычтите 1 из счетчика года. Проблема с этим решением: он требует больше кода и не очень удобочитаем.
Так как это можно сделать правильно?