我有两个数组
a = [0, 1, 2, 0, 0, 0, 1, 2, 3, 0, 0, 1, 2]
b = [1, 2, 1, 2, 3, 1, 4, 5, 1, 5, 6, 7, 8]
对第一个数组a
建立索引,我想对b
进行一些计算:
将b
的元素从a
上的一个零加到下一个零的到达,但在下一个零点排除b
的元素。并且,如果a
上有两个连续的零,则应将相同的元素存储在包含结果的新向量中。
最终的载体应该是:
result=[4,2,3,11,5,21].
我试过这样:
vec1 = []
for i in range(len(a)-1):
if a[i] == a[i+1] == 0:
vec1.append(b[i])
print(vec1)
但我只得到连续零的结果。当没有连续的零时,我无法弄清楚。
答案 0 :(得分:1)
你需要在0中找到那些元素的索引,然后zip a
和b
创建一对这些元素,然后用一个list comprehension发现grub相关的总和但要注意demo以便更好地理解代码:
>>> a=[0,1,2,0,0,0,1,2,3,0,0,1,2]
>>> b=[1,2,1,2,3,1,4,5,1,5,6,7,8]
>>> indx=[i for i,j in enumerate(a) if j==0]+[len(a)]
>>> l= list(zip(a,b))
>>> [sum(v[1] for v in l[i:j]) for i,j in zip(indx,indx[1:])]
[4, 2, 3, 11, 5, 21]
演示:
>>> indx=[i for i,j in enumerate(a) if j==0]+[len(a)]
>>> indx
[0, 3, 4, 5, 9, 10, 13]
>>> zip(indx,indx[1:])
[(0, 3), (3, 4), (4, 5), (5, 9), (9, 10), (10, 13)]