Ich möchte die unterschiedlichen Kombinationen prozentualer Gewichtungen von n Elementen in einer Liste speichern. Dabei gilt: E1 + E2 + … + En = 1 bzw. 100%. Des Weiteren will ich möglichst unpythonisch programmieren, da das Programm später in JavaScript übertragen werden soll.
Zur Lösung des Ganzen ist mir bisher nur eine brute-force-Methode vermittels Rekursion eingefallen. Wenn ich print(x) hinzunehme, zeigt er mir das Gewollte. An die Liste (permut) wird allerdings nur und an sich fälschlicher Weise [0,0,0,0] angehängt.
Vielen Dank im Voraus für Eure Antworten.
Code: Alles auswählen
def deepblue(start,items,line,skala):
if start < items:
for i in range(len(skala)):
line[start] = skala[i]
x = deepblue(start+1,items,line,skala)
#print(x)
if (round(sum(x),2) == 1.0) and (x not in permut):
permut.append(x)
return line
else:
return line
global permut
permut = []
items = 4
step = 0.05
total = 1
mini = 0
skala = []
line = []
while total >= mini:
skala.append(total)
total = round(total-step,2)
for i in range(items):
line.append(0)
deepblue(0,items,line,skala)
for line in permut:
print(line)