gpt4 book ai didi

python - 在python中分配数组(列表)算法排列

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:40:47 24 4
gpt4 key购买 nike

所以我无法解决以下问题:

给定一个数组大小,让我们假设问题大小=20

用零填充如下arr = [0]*20 ==> [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]

我们有几个固定的样本大小,比如 4,3,2

样本A=4,样本B=3,样本C=2

我需要知道如何分配列表的排列/变体。

我可以将每个样本放在不同的位置/索引

例如,sampleA= 4 我可以将其放在 0:3 或 1:4...15:19.. 的索引中(如你所见,有相当多的可能性)

一旦变得更加拥挤,事情就会变得复杂,例如:

3+2+3+4

[0, x, x, x, 0, 0, x x, 0, x, x, x, 0, 0, 0, 0, x, x,x, x]

我基本上需要的是找到分配样本的所有可能性,

我得到一本字典:key = 索引的样本大小,以及value=多次重复。

对于上面的例子:{3:2,2:1,4:1}

我希望该函数返回一个索引列表!=0

对于这个例子:[0, x, x, x, 0, 0, x x, 0, x, x, x, 0, 0, 0, 0, x, x,x, x]

该函数将返回:list_ind = [0,5,6,9,13,14,15,16]

最佳答案

所以我请了一位同事帮忙,我们得出了一个解决方案:

我举了一个例子: 4:2, 3:1, 2:1

或口头:

两次4,一次3,一次2下面的代码:

*如果有人可以优化,那就太好了

size_of_wagon = 20
dct = {4:2,3:1,2:1}
l = [item for sublist in [[k] * v for (k, v) in dct.items()] for item in sublist]


def gen_func(lstOfSamples, length, shift):
try:
# print(f'lstOfSamples={lstOfSamples}')
sample = lstOfSamples[0] # Take first sample
for i in range(length - sample):
for x in gen_func(lstOfSamples[1:], length - (sample + i), shift + sample + i):
yield [(shift + i, sample)] + x
except:
yield []


g = list(gen_func(l, size_of_wagon, 0))

for i in g:
print(i)
print(len(g))

关于python - 在python中分配数组(列表)算法排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51299478/

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