我正在尝试使用不同长度的滚动窗口从列表的一部分中查找特定的总和。首先,我创建了一个基本的数字列表,然后尝试对生成的一些滚动窗口进行求和。不幸的是,这似乎不可能做到。
foo = []
for x in range (1, 200):
foo.append(x)
def subsequences(iterable, length):
return [iterable[i: i + length] for i in xrange(len(iterable) - length + 1)]
for i in range (1, len(foo)):
print sum(subsequences(foo, i))
我收到的错误是:
类型错误:+ 不支持的操作数类型:“int”和“list”
有没有办法生成每个子序列并对它们求和?
最佳答案
检查 subsequences()
的输出揭示了问题:您正在尝试将列表序列添加在一起,以获得每个列表中包含的整数值的总和。
print(subsequences(foo, i))
# [[1], [2], [3], [4], [5], [6], [7], [8] ...]
这不是 Python 内置 sum
的设计目的,但如果您使用 Numpy 的 sum
,此操作将会起作用:
import numpy as np
# ...
for i in range (1, len(foo)):
print (np.sum(subsequences(foo, i)))
输出:
19900
39600
59100
78400
97500
116400
...
或者,您可以在应用 sum
之前提取每个列表中的值,但使用 Numpy 可以让您的代码保持原样,只需添加 np.
即可很好。
关于python - 不同长度的滚动窗口的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47735075/