循环列表

时间:2018-04-08 09:33:53

标签: python list

我很难理解如何解决以下问题。

我想按连续顺序对列表中的每个“n”元素求和。例如:

n = 2
seq = [2, 2, 1, 3]
res = [4, 3, 4]

如何在列表的每个n元素上应用某些条件(例如总和)?我不想导入任何特殊的库,因为它将帮助我理解基础知识。

4 个答案:

答案 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)

以下是使用mapzip的一种方式:

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的数字。