【问题标题】:How to create a third vector from two existing vectors with looping and indexing?如何使用循环和索引从两个现有向量创建第三个向量?
【发布时间】:2020-04-28 23:58:53
【问题描述】:

我有两个向量(ab)并想从这两个向量中创建第三个向量(c)。它们都应该具有相同的长度。如果向量a 中有一个零(0),则具有此索引的向量b 的值(其中a 为零)应与下一个值相加,直到向量a 中的值是十一 (11),然后将这些值的总和存储在向量 c 中。 c 的其余值应为零 (0)。

a=[0, 11, 0, 11, 0, 0, 0, 11]
b=[1.1, 1.1, 9, 9, 9, 6.6, 6.6, 9]

所以向量c 应该是这样的:

c=[0, 2.2, 0, 18, 0, 0, 0, 31.2]

我创建了下一个代码,它几乎适用于这种情况,除了最后一个值(它作为最后一个值15.6 的输出)。而且我还需要更高效的东西,那么向量a 可能会出现三个以上的零。

for w in range(0,len(a)):
    if a[w]==0 and a[w+1]!=0:
        c[w+1]=b[w]+b[w+1]

    elif a[w]==0 and a[w+1]==0 and a[w+2]!=0:
        c[w+2]=b[w]+b[w+1]+b[w+2]

    elif a[w]==0 and a[w+1]==0 and a[w+2]==0:
        c[w+3]=b[w]+b[w+1]+b[w+2]+b[w+3]

【问题讨论】:

    标签: python loops vector indexing conditional-statements


    【解决方案1】:

    所以我们可以使用zip同时循环ab

    然后我们只需要将 b 中的累积值相加,直到 a 中的值是 11,当我们得到 11 然后我们写入累积值并重置它,否则写入 0

    a = [0, 11, 0, 11, 0, 0, 0, 11]
    b = [1.1, 1.1, 9, 9, 9, 6.6, 6.6, 9]
    culm = 0
    result = []
    for a_val, b_val in zip(a, b):
        culm += b_val
        if a_val == 11:
            result.append(culm)
            culm = 0
        else:
            result.append(0)
    
    print(result) # [0, 2.2, 0, 18, 0, 0, 0, 31.2]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-15
      • 1970-01-01
      • 1970-01-01
      • 2015-07-11
      相关资源
      最近更新 更多