【问题标题】:indexing one array and doing operation on another索引一个数组并对另一个数组进行操作
【发布时间】:2015-03-11 18:47:51
【问题描述】:

我有两个数组

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)

但我只得到了连续零的结果。我无法弄清楚没有连续零的情况。

【问题讨论】:

    标签: arrays python-3.x


    【解决方案1】:

    首先你需要在 a 中找到那些为 0 的元素的索引,然后 zip ab 来创建一对这些元素,然后用列表解析找到 grub 相关的总和但要注意演示以便更好地理解代码:

    >>> 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)]
    

    【讨论】:

    • @ Kasra indx=[i for i,j in enumerate(l) if j[0]==0]+[len(l)] TypeError: 'zip' 类型的对象没有 len ()。我正在研究 python 3.4.2
    • @Apc 那么发生了什么?
    • 我再次收到错误 [sum(v[1] for v in l[i:j]) for i,j in zip(indx,indx[1:])] TypeError: ' zip' 对象不可下标
    • @Apc 对不起,我想念你在 python 3 中使用 l= list(zip(a,b)) 它将工作 100%
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-13
    • 1970-01-01
    • 2016-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    相关资源
    最近更新 更多