Найти сумму подмножеств списка в 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)] 
  • Как удалить элемент в списке, если он существует?
  • Как рассчитать средние значения по столбцам в данной структуре данных?
  • Использование pop для удаления элемента из 2D-массива
  • Почему кортежи занимают меньше места в памяти, чем списки?
  • вычисление частот во вложенном списке
  • Как удалить элемент из списка python, если условие True?
  • конкатенировать произвольное количество списков в функции в Python
  • Список и список python
  • Python: длина самой длинной общей подпоследовательности списков
  • Смешайте два списка python
  • Почему содержимое кортежа изменяется, когда я добавляю его в список внутри него, но не меняет, когда я обновляю переменную?
  •  
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.