Ich bin sehr fest auf diesem (wahrscheinlich, weil ich neu in der Computerprogrammierung bin). ich den folgenden Code haben, von der Frage: [Python: Find all possible combinations of parts of a given numberPython: Wie man Kombinationen von Teilen einer gegebenen Zahl berechnet, die Nummer, die Listenlänge, die erste und die letzte Nummer gibt
def sum_to_n(n, size, limit=None):
"""Produce all lists of `size` positive integers in decreasing order
that add up to `n`."""
if size == 1:
yield [n]
return
if limit is None:
limit = n
start = (n + size - 1) // size
stop = min(limit, n - size + 1) + 1
for i in range(start, stop):
for tail in sum_to_n(n - i, size - 1, i):
yield [i] + tail
for partition in sum_to_n(8, 3):
print (partition)
[6, 1, 1]
[5, 2, 1]
[4, 3, 1]
[4, 2, 2]
[3, 3, 2]
ist es sehr nützlich, aber ich versuche, es zu ändern, um einige Optionen einzustellen. Angenommen, ich die erste Nummer der Liste nur die Ergebnisse in Wich haben will, ist 4 und die letzte der Liste ist 1. Im Moment benutze ich diese Lösung:
def sum_to_n(n,first, last, size, limit=None):
if size == 1:
yield [n]
return
if limit is None:
limit = n
start = (n + size - 1) // size
stop = min(limit, n - size + 1) + 1
for i in range(start, stop):
if i <=first:
for tail in sum_to_n(n - i,first,last, size - 1, i):
ll=len(tail)
if tail[ll-1]==last:
yield [i] + tail
for i in sum_to_n(8,4,1,3):
if i[0]==4 and i[size-1]==1:
print(i)
if i[0]>4:
break
[4,3,1]
Aber mit größeren Zahlen sind das Programm viel unerwünschte Arbeit machen. Zum Beispiel berechnet die for i in range(start, stop):
alle möglichen ersten Nummern der Liste und nicht nur den "ersten" Parameter vermeintlich und die Funktion funktioniert nicht ohne sie. Jemand kann eine bessere und schnellere Lösung vorschlagen, um die Funktion aufzurufen, die die Parameter enthält, die benötigt werden, um nur die angeforderten Berechnungen zu haben?
Wenn ich Ihren ersten Code in Python ausführen 3.5.2, erhalte ich die gleichen Listen, aber in umgekehrter Reihenfolge. Erhalten Sie tatsächlich die Bestellung, die Sie zeigen? –
nein es ist nur zum Beispiel, ist nicht die tatsächliche Ausgabe –