Попробуйте это:
>>> from collections import Counter
>>> weekdays = Counter()
>>> date_from = datetime.date(2014,11,30) # Sunday
>>> date_to = datetime.date(2014,12,9) # Tuesday
>>> for i in range((date_to - date_from).days+1):
... weekdays[(date_from + datetime.timedelta(i))\
... .strftime('%a')] += 1
>>> weekdays
Counter({'Sun': 2, 'Tue': 2, 'Mon': 2, 'Wed': 1, 'Fri': 1,
'Thu': 1, 'Sat': 1})
Другой взятие:
def dates_between(start, end):
while start <= end:
yield start
start += datetime.timedelta(1)
def count_weekday(start, end):
counter = Counter()
for date in dates_between(start, end):
counter[date.strftime('%a')] += 1
return counter
Тогда:
>>> count_weekday(date_from, date_to)
Counter({
'Sun': 2,
'Tue': 2,
'Mon': 2,
'Wed': 1,
'Fri': 1,
'Thu': 1,
'Sat': 1
})
[обновление]
Mark Ransom прокомментировал:
Нет необходимости рассчитывать каждый отдельный день отдельно. ... Я уже отдал предпочтение людям, которые делали это лучше.
Я уверен, что существует много других способов достижения такого же результата, но в чем смысл? Возможно, кто-то беспокоится о производительности. Я не - потому что:
- разница между
O(n)
и O(n log n)
не имеет никакого значения для малых п.
- как сказал почтенный Дональд Кнут: «Преждевременная оптимизация - это корень всего зла».
- Ответ на вопросы о производительности всегда «профиль его» - не раз я был удивлен тем, насколько неинтуитивными могут быть результаты.
И после профилирования, даже если другой алгоритм несколько миллисекунд быстрее:
- является разница в производительности актуальна для применения?
- - это код, о котором легче рассуждать?
- Вы можете убедиться, что все угловые корпуса покрыты?
Торговля между сырым продуктом и более простым дизайном - это тот, который я готов взять большую часть времени.
Нет необходимости рассчитывать каждый отдельный день отдельно. –
@MarkRansom, даже если вы правы, ваш комментарий не очень конструктивен. Мне все равно, чтобы написать более эффективное решение - если да, напишите свой собственный ответ. :-) –
Комментарий не предназначен для вас, это предназначалось для других, смотрящих на этот ответ. И мне не нужно писать самостоятельно, я уже отдал предпочтение людям, которые делали это лучше. –