索引一个数组并对另一个数组进行操作

时间:2015-03-11 18:47:52

标签: arrays python-3.x

我有两个数组

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)

但我只得到连续零的结果。当没有连续的零时,我无法弄清楚。

1 个答案:

答案 0 :(得分:1)

你需要在0中找到那些元素的索引,然后zip ab创建一对这些元素,然后用一个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)]