我有以下数组
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]
有什么建议吗?
答案 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]