首页 > 解决方案 > 如何在Python中的列表中间总结所有相邻的非零值

问题描述

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

说,我有一个名为

a = [2, 3, 0, 0, 1, 0, 3, 3, 1, 0, 0]. 

在 a 中,将有多个元素非零的实例。例如,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

标签: pythonlist

解决方案


您可以使用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]

推荐阅读