fit*_*ele 11 python list chunks
这可能很简单,我忽略了一些......
我有一长串整数,在这种情况下代表网站的每日访问者.我想要一份新的每周访客列表.因此,我需要从原始列表中获取七个组,将它们相加,然后将它们添加到新列表中.
我的解决方案似乎相当暴力,不优雅:
numweeks = len(daily) / 7
weekly = []
for x in range(numweeks):
y = x*7
weekly.append(sum(visitors[y:y+7]))
Run Code Online (Sandbox Code Playgroud)
这样做有更高效,更pythonic的方式吗?
Win*_*ert 15
weekly = [ sum(visitors[x:x+7]) for x in range(0, len(daily), 7)]
Run Code Online (Sandbox Code Playgroud)
或者稍微不那么密集:
weekly = []
for x in range(0, len(daily), 7):
weekly.append( sum(visitors[x:x+7]) )
Run Code Online (Sandbox Code Playgroud)
或者,使用numpy模块.
by_week = numpy.reshape(visitors, (7, -1))
weekly = numpy.sum( by_week, axis = 1)
Run Code Online (Sandbox Code Playgroud)
请注意,这要求访问者中的元素数量是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))
Run Code Online (Sandbox Code Playgroud)