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))
其实,这是一个很好的codereview.stackexchange.com是sp。的问题特别是为了改进代码,使其更快/更优雅。 – 2011-05-26 03:47:47
谢谢......不知道那个stackexchange网站。很难知道哪一个问题适合哪个问题,尤其是因为现在有这么多。另外,这个似乎有所有的眼球,所以我总是觉得原来是最好的。 :) – fitzgeraldsteele 2011-05-26 03:52:15
这段代码没有错 - 它很直接,并且很好地传达了它的意图。我只是将var名称更改为比'x'和'y'更具描述性的内容,但除此之外,这比任何基于理解的破解更有优势 – 2011-05-26 03:52:23