Pracuję nad szybkimi i brudnymi skryptami do wykonywania niektórych zadań domowych z chemii, a jeden z nich przechodzi przez listy o stałej długości, w których sumują się wszystkie elementy dana stała. Dla każdego sprawdzam, czy spełniają niektóre dodatkowe kryteria i umieszczają je na innej liście.Tworzenie tablicy liczb, które sumują się pod podanym numerem
ja wymyśliliśmy sposób, aby spełnić kryteria Sum, ale wygląda przerażające i jestem pewien, że istnieje jakiś rodzaj pojętny chwili tutaj:
# iterate through all 11-element lists where the elements sum to 8.
for a in range(8+1):
for b in range(8-a+1):
for c in range(8-a-b+1):
for d in range(8-a-b-c+1):
for e in range(8-a-b-c-d+1):
for f in range(8-a-b-c-d-e+1):
for g in range(8-a-b-c-d-e-f+1):
for h in range(8-a-b-c-d-e-f-g+1):
for i in range(8-a-b-c-d-e-f-g-h+1):
for j in range(8-a-b-c-d-e-f-g-h-i+1):
k = 8-(a+b+c+d+e+f+g+h+i+j)
x = [a,b,c,d,e,f,g,h,i,j,k]
# see if x works for what I want
'[vals dla Vals w itertools.product (zakres (8), powtórz = 11), jeżeli suma (Vals) == 8]' jest piękniejsze, ale ** ** znacznie wolniej niż rozwiązania. – eumiro
+1 - Rekwizyty do korzystania z komputera w celu zautomatyzowania odrabiania zadań domowych z chemii powtórkowej. –
Mój wgląd jest następujący: w przypadku listy 11 liczb całkowitych wszystkich sumujących do 8, wiele liczb będzie zerowych. Szybkim sposobem na to byłoby znalezienie wszystkich sposobów sumowania liczb całkowitych do 8 - na przykład '8, 1 + 7, 2 + 6, 3 + 5, 4 + 4, 1 + 1 + 6, 1 + 2 + 5 ... ', a następnie po prostu permutuj tych z odpowiednią liczbą zer. –