我正在寻找一种在itertools.accumulate
中使用starmap
的方法。
我试图计算表中每一行的累加和,然后将结果连接到一个数组:
# my input
my_table = [[3, 5], [1, 4, 7], [2]]
# expected output
P = [3, 8, 1, 5, 12, 2]
我在for循环中使用itertools,但是它比其他方法慢得多。 那么有可能使用starmap或其他itertools方法使其更快吗?
def getSums(my_table):
P = []
for i in range(len(my_table)):
P.append(itertools.accumulate(my_table[i]))
P = itertools.chain.from_iterable(P)
return P
答案 0 :(得分:3)
您不需要starmap
,只需使用内置的map
函数并使用itertools.chain()
链接结果:
In [47]: list(chain.from_iterable(map(accumulate, my_table)))
Out[47]: [3, 8, 1, 5, 12, 2]
答案 1 :(得分:0)
您可以在extend
的简化版本中使用初始循环方法,该方法可以进行任何迭代:
P = []
for lst in my_table:
P.extend(accumulate(lst))
答案 2 :(得分:0)
使用Itertools效果很好,这是实际情况,您可以编写 您自己的解决方案只需使用生成器(无需stdlib)。
def chain_cumsum(table):
for it in table:
yield from cumsum(it)
# write a function to get accumulated sum
def cumsum(l):
total = 0
for i in l:
total += i
yield total
# then you can get your output:
list(chain_cumsum(my_table))