Найти сумму подмножеств списка в python

Это, наверное, очень просто, и я что-то пропускаю …

У меня длинный список целых чисел, в данном случае представляющих ежедневных посетителей веб-сайта. Я хочу новый список еженедельных посетителей. Поэтому мне нужно получить группы из семи из первоначального списка, суммировать их и добавить их в новый список.

Мое решение кажется довольно грубой силой, неэлегантной:

numweeks = len(daily) / 7 weekly = [] for x in range(numweeks): y = x*7 weekly.append(sum(visitors[y:y+7])) 

Есть ли более эффективный или более питонический способ сделать это?

3 Solutions collect form web for “Найти сумму подмножеств списка в python”

 weekly = [ sum(visitors[x:x+7]) for x in range(0, len(daily), 7)] 

Или чуть менее плотно:

 weekly = [] for x in range(0, len(daily), 7): weekly.append( sum(visitors[x:x+7]) ) 

Альтернативно, используя модуль numpy.

 by_week = numpy.reshape(visitors, (7, -1)) weekly = numpy.sum( by_week, axis = 1) 

Обратите внимание, что для этого требуется, чтобы количество посетителей в посетителе было кратным 7. Оно также требует установки numpy. Однако, вероятно, он также более эффективен, чем другие подходы.

Или для бонуса кода itertools:

 def grouper(n, iterable, fillvalue=None): "grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx" args = [iter(iterable)] * n return itertools.izip_longest(fillvalue=fillvalue, *args) weekly = map(sum, grouper(7, visitors, 0)) 
 >>> daily = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] >>> print [sum(daily[x:x+7]) for x in range(0, len(daily), 7)] [28, 77, 105] 

Я не уверен, что это «pythonic», но я действительно люблю этот однострочный материал python.

Гори Детали: Понимание

Использование itertools.islice:

 weekly = [sum(list(itertools.islice(daily, i, i+7))) for i in range(0, len(daily), 7)] 

Редактировать:

или, с math.fsum:

 weekly = [math.fsum(itertools.islice(daily, i, i+7)) for i in range(0, len(daily), 7)] 
  • Python - изменения счетных знаков
  • Python: найдите список в составе членов другого списка (в порядке)
  • Как найти позицию элемента в списке, в Python?
  • Присоединить список float к разделительной строке в Python
  • Попытка понимания списка Python с двумя переменными разных диапазонов
  • Почему добавление в список делает разные вещи?
  • Вычитание 2 списков в Python
  • Список автозагрузки в Python?
  • Python - лучший язык программирования в мире.