我很难理解如何解决以下问题。
我想按连续顺序对列表中的每个“n”元素求和。例如:
n = 2
seq = [2, 2, 1, 3]
res = [4, 3, 4]
如何在列表的每个n元素上应用某些条件(例如总和)?我不想导入任何特殊的库,因为它将帮助我理解基础知识。
答案 0 :(得分:2)
使用while循环遍历列表。首先创建一个变量i
,
它比n
小1,然后通过while循环,增加i
,同时小于len(seq)
(在本例中为4)。每次都在列表中的当前索引(i
)和前面的n
项目中添加项目。
n = 2
seq = [2, 2, 1, 3]
res = []
i = n-1
while i < len(seq):
res.append(sum(seq[i - (n-1):i+1]))
i += 1
然后print(res)
将输出[4, 3, 4]
。
答案 1 :(得分:1)
以下是使用map
和zip
的一种方式:
In [9]: def summer(seq, le):
...: return map(sum, zip(*[seq[i:] for i in range(le)]))
...:
In [10]:
In [10]: list(summer(seq, 2))
Out[10]: [4, 3, 4]
In [11]: list(summer(seq, 3))
Out[11]: [5, 6]
答案 2 :(得分:1)
有很多方法可以产生滑动窗口总和。例如:
winsize = 2
inputs = [2, 2, 1, 3]
method1 = [sum(inputs[start:start+winsize])
for start in range(0, len(inputs)-winsize+1)]
method2 = []
accumulator = 0
for i,v in enumerate(inputs):
accumulator += v
if i >= winsize:
accumulator -= inputs[i-winsize]
if i >= winsize-1:
method2.append(accumulator)
答案 3 :(得分:0)
>>> n = 2
>>> seq = [2, 2, 1, 3]
>>> res = []
>>> for i in range(len(seq) - n + 1):
... res.append(sum(seq[i:i+n]))
...
>>> res
[4, 3, 4]
这样做的工作 - 只需将元素循环到len(seq) - n + 1
- 这是因为你不希望python总结最后长度小于n
的数字。