0

此函数产生前 n 个值的总和,第二个 n 值的总和......等等。

这是功能:

def collect_sum(iterable,n):
    for e in range(1,len(ite)+1):
        if e%n==0:
            yield sum(iterable[e-n:e])

for i in c_sum(range(1,21),5):
       print(i,end=' ')

这应该返回 15、40、65。当我使用列表推导时,它返回 0、30、40。

4

3 回答 3

2
def collect_sum(i,n):
    return (sum(g) for (_,g ) in groupby(i,key=lambda _,c=count():floor(next(c)/n)))
for v in collect_sum(range(1,21),5):
    print(v)

产生:

15
40
65
90
>>> 
于 2013-05-01T05:53:49.700 回答
1
# generator version
def collect_sum(iterable,n):
  for e in range(1,len(iterable)+1):
    if e%n==0:
      yield sum(iterable[e-n:e])

# list comprehension version
def collect_sum(iterable,n):
  return [sum(iterable[e-n:e]) for e in range(1,len(iterable)+1) if e%n==0] 

for i in collect_sum(range(1,21),5):
  print(i,end=' ')
于 2013-05-01T05:23:36.540 回答
0

使用itertools.islice

   

In [28]: n=5

In [29]: from itertools import islice

In [30]: lis=range(1,21)

In [31]: it=iter(lis)

In [33]: [sum(islice(it,n))  for _ in xrange(len(lis)/n) ]

Out[33]: [15, 40, 65, 90]
于 2013-05-01T05:26:20.017 回答