如何在Python列表中间求和所有相邻的非零值

los*_*oss 2 python list

我是Python的初学者。我需要通过汇总列表中的相邻非零值来解决问题。

说,我有清单叫

a = [2, 3, 0, 0, 1, 0, 3, 3, 1, 0, 0]. 
Run Code Online (Sandbox Code Playgroud)

在中,将有多个元素不为零的实例。例如,2和3正在邻居中,所以我想将它们加起来,得到5。

然后,还有另一个相邻的元素分别是3、3和1。这是我面临的问题,因为我想将其加总为7。

但是在我尝试的代码中,它仍然打印出4,这是a [7]和a [8]的总和。有什么办法可以避免这种情况吗?

c =[]
for i in range(1, len(a)): 
    if a[i-1] != 0:
        if a[i] != 0:
           tot = a[i] + a[i-1]
           c.append(tot)
           if a[i+1] != 0:
               tot = tot + a[i+1]
               c.append(tot)
    else:
        tot = 0;
        continue
Run Code Online (Sandbox Code Playgroud)

Net*_*ave 6

您可以使用itertools.groupby和理解:

>>> import itertools
>>> a = [2, 3, 0, 0, 1, 0, 3, 3, 1, 0, 0]
>>> [sum(v) for k, v in itertools.groupby(a, key=lambda x: x != 0) if k != 0]
[5, 1, 7]
Run Code Online (Sandbox Code Playgroud)