这可能非常简单,但我忽略了一些东西......
我有一长串整数,在本例中代表网站的每日访问者。我想要一个新的每周 访问者列表。所以我需要从原始列表中获取七人一组,对它们求和,然后将它们添加到新列表中。
我的解决方案看起来很蛮力,不够优雅:
numweeks = len(daily) / 7
weekly = []
for x in range(numweeks):
y = x*7
weekly.append(sum(visitors[y:y+7]))
是否有更高效或更 Pythonic 的方式来做到这一点?
最佳答案
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)
注意,这需要visitor中的元素个数是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))
关于list - 在python中查找列表子集的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6133434/