如何跳过值和总和,直到满足数组 python 中的条件?

问题描述 投票:0回答:1

现在,我有一个像这样的数组:

arr = np.array([[1, 300], [2, 100],[3, 0],[4, 0],[5, 50],[6, 100]])

我的问题是分别添加数组 300+100+0+0+50+100 但条件是按顺序求和,直到结果为 150。所以,我想知道如何从 [1 中跳过 arr=300 的 sum , 300] 然后 python 求和直到满足 [2, 100] 和 [5, 50] 为 100+50,然后将这两个数组收集在同一个变量中。你能推荐我扩展我的编码吗?谢谢

d = 0
for i in range(len(arr)):
    if d >= 150:
        break
    d += arr[i][1]
i=i+1

python arrays list sorting
1个回答
0
投票

如果您正在寻找总和达到目标值(150)的连续索引,您可以构建一个返回其索引的累积总和字典。然后将其本身与目标进行匹配,作为累积和之间的增量。匹配的键将为您提供范围:

arr    = [300,100,0,0,50,100]
target = 150

from itertools import accumulate

sumIndex = {s:i for i,s in enumerate(accumulate([0]+arr)) }

targetRanges = [ (i,sumIndex[s+target]) for s,i in sumIndex.items() 
                 if s+target in sumIndex ]

for start,stop in targetRanges:
    print(start,stop,arr[start:stop])

1 5 [100, 0, 0, 50]
4 6 [50, 100]

它也可以在没有 itertools 的情况下在单个(复杂的)字典理解中完成:

ranges = [ (d[d[""]-target],i) for d in [{0:0,"":0}]
           for i,a in enumerate(arr,1)
           if d.update([(d[""]+a,i),("",d[""]+a)]) or d[""]-target in d ]
© www.soinside.com 2019 - 2024. All rights reserved.