我需要通过以下方式获得排列:我有N插槽,这个插槽可以填充从1 to D. 为了得到所有可能的排列,我写了一个循环,它给了我每一种不同的可能性。这些循环看起来有点“奇怪”,因为它是一个需要可变的嵌套循环。这个循环需要两天时间才能完成(对于我的 N = 8 和 D = 25 的条件),但是我只需要槽中变量之和等于 的排列"D"。
import numpy as np
from tqdm import tqdm
N = 4 # actualy 8
D = 16 # actually 25
test = np.ones(shape=N)
for k in range(0,pow(D-1,N)):
if sum(test) == D:
print("this is a suiting fit!",test)
# last one gets always changed
if test[N-1]+1 < D:
test[N-1] += 1
else:
test[N-1] = 1
for idx in range(2,len(test)+1):
if test[len(test) -idx] + 1 < D:
test[len(test) - idx] += 1
break
else:
test[len(test) - idx] = 1
由于上面的循环可能看起来有点混乱,我将它加入了嵌套循环
for i in range(0,D-1):
for j in range(0,D-1):
for k in range(0,D-1):
for l in range(0,D-1):
if k+1+l+1+j+1+i+1 == D:
print("this is a suting fit!",k+1,l+1,j+1,i+1)
我不知道如何通过简化或在遍历排列之前应用条件来使其更快,感谢任何帮助
泛舟湖上清波郎朗
茅侃侃
相关分类