gpt4 book ai didi

python - 修改列表中数字的累积和

转载 作者:行者123 更新时间:2023-11-30 23:08:07 24 4
gpt4 key购买 nike

我想根据列表中数字的累积和创建新列表。输入是理想的 - 可以分割为子集,每个子​​集的总和相等。子集长度不相等。输入子集个数。

输出的每个子集代表增量整数[0,1,2,3,...],它替换原始输入。整数的数量是子集的数量。

示例:

number of subsets = 2   

input = [1, 4, 5]
#cumsum = [1, 5, 10]
subsets = [1,5], [10]
output-subsets = [0,0], [1]
output = [0, 0, 1]

示例1:

number of subsets = 4

input = [1, 2, 3, 4, 2, 5, 1, 6]
#cumsum = [1, 3, 6, 10, 12, 17, 18, 24]
subsets = [1,3,6], [10, 12],[17, 18], [24]
output-subsets = [0, 0, 0], [1, 1], [2, 2], [3]
output = [0, 0, 0, 1, 1, 2, 2, 3]

number of subsets = 2

input = [1, 2, 3, 4, 2, 5, 1, 6]
#cumsum = [1, 3, 6, 10, 12, 17, 18, 24]
subsets = [1, 3, 6, 10, 12],[17, 18, 24]
output-subsets = [0, 0, 0, 0, 0], [1, 1, 1]
output = [0, 0, 0, 0, 0, 1, 1, 1]

我尝试修改SO question :

def changelist(lis, t):
total = 0

s = sum(lis)
subset = s/t

for x in lis:
total += x
i= 1
if(total <= subset):
i = 0
yield i


#changelist([input array], number of subset)
print list(changelist([1, 2, 3, 4, 2, 5, 1, 6], 4))

但只有第一个子集是正确的:

output = [0, 0, 0, 1, 1, 1, 1, 1]

我认为numpy.array_split有问题strange behaviour of numpy array_split .

我真的很喜欢任何形式的解释或帮助。

最佳答案

这应该可以解决您的问题:

def changelist (l, t):
subset = sum(l) / t
current, total = 0, 0
for x in l:
total += x
if total > subset:
current, total = current + 1, x
yield current

示例:

>>> list(changelist([1, 4, 5], 2))
[0, 0, 1]
>>> list(changelist([1, 2, 3, 4, 2, 5, 1, 6], 4))
[0, 0, 0, 1, 1, 2, 2, 3]
>>> list(changelist([1, 2, 3, 4, 2, 5, 1, 6], 2))
[0, 0, 0, 0, 0, 1, 1, 1]

它是如何工作的?

  • current 存储当前子集的“id”,total 存储当前子集的总和。
  • 对于初始列表 l 中的每个元素 x,将其值添加到当前 total,如果此 total 大于每个子集的预期总和(我的代码中的 subset),那么您就知道您位于下一个子集(current = current + 1)然后将当前子集的总和“重置”为实际元素 (total = x)。

关于python - 修改列表中数字的累积和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31915504/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com