数组中的组元素和总和

时间:2016-07-30 00:46:00

标签: python arrays

我有以下数组

a = [0,0,1,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,0,0,1]

我想对每个第3个元素进行分组,并对每个组中的所有元素求和。所以我可以得到一个新数组,显示这个总和

b = [1,0,2,0,3,0,1]

有什么建议吗?

4 个答案:

答案 0 :(得分:3)

简单地说,大多数pythonicly将是以下

b = [sum(a[i:i+3]) for i in range(0, len(a), 3)]

您的输入数组为a

>>> a = [0,0,1,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,0,0,1]
>>> b = [sum(a[i:i+3]) for i in range(0, len(a), 3)]
>>> b
[1, 0, 2, 0, 3, 0, 1]

答案 1 :(得分:2)

也许是这样的:

a = [0,0,1,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,0,0,1]
b = []

for i in range(0,len(a),3):
    b.append(sum(a[i:i+3]))
print b

输出:

[1, 0, 2, 0, 3, 0, 1]

答案 2 :(得分:2)

你可以分成块和总和:

step = 3
[sum(a[i:i+step]) for i in range(0, len(a),step)]
[1, 0, 2, 0, 3, 0, 1]

如果长度不是步长的倍数,则最后一个块可能更小。

答案 3 :(得分:1)

使用groupby中的itertools的另一个选项:

from itertools import groupby
[sum(v for _, v in g) for _, g in groupby(enumerate(a), key = lambda x: x[0]/3)]
# [1, 0, 2, 0, 3, 0, 1]

使用zip的另一种方式:

[sum(v) for v in zip(a[::3], a[1::3], a[2::3])]
# [1, 0, 2, 0, 3, 0, 1]