Python-erstellen einer Liste mit itertools.Produkt?
Ich bin momentan dabei, eine Liste mit itertools aus einer Liste von Bereichen, so weit habe ich dieses:
start_list = [xrange(0,201,1),xrange(0,201,2),xrange(0,201,5),xrange(0,201,10),xrange(0,201,20),xrange(0,201,50),xrange(0,201,100),xrange(0,201,200)]
Nun, ich weiß, dass wenn ich versuchen zu laufen, die nächste Zeile wird es töten mein python-interpreter:
next_list = list(itertools.product(*start_list))
Was ich Frage ist wäre es möglich, ein argument, das prüft jedes Tupel, für die die Summe seiner Elemente und bringt Sie in next_list, wenn gleich eine bestimmte Menge?
Vielleicht so etwas wie:
next_list = list(itertools.product(*start_list,sum(tuples)=200))
Ich weiß, das ist nicht richtig und ich muss anfangen neu zu denken, wie werde ich über diese. Wird start_list die Bereiche in den generator zu viele, um durch den Bau eines weiteren Liste?
- Wenn Sie versuchen, um herauszufinden, wie die partition der integer-200 in 8 Bedingungen, gezeichnet von unterschiedlichen sets, gibt es einfachere Wege, um zu berechnen, next_list. Wenn ich zähle rechts Ihr Kartesisches Produkt hat 5768123130 unterschiedliche Elemente zu iterieren über, die wird eine Weile dauern.
- Hallo DSM, vielen Dank für die Beantwortung. Ich werde auf der Suche in die Schaffung einer effizienteren Methode.
- Verwandte: stackoverflow.com/questions/1106929/...
- J. F. Sebastian, danke, hatte ich gesehen, links, Diskussionen über dieses und andere ähnliche Probleme(ich hatte gelesen, das wiki auf den Ranzen). Ich wollte nicht, sehen die anderen Lösungen, bevor Sie zu sehen, wenn ich könnte, um ein effizientes selbst einer. Nun, der code lief ich war nirgends in der Nähe der Minuten-Regel und war immer so brute ' ish, ich habe das richtige Ergebnis, ich bin immer noch zögerlich zu schauen, bevor ich einen optimalen Weg zu gehen über diese.
- sorry, ich bin spät, um die Partei; bitte betrachten Sie meine Antwort!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Besser, nur verwenden einer list-comprehension
for i in list(itertools.product(*start_list)): if sum(i) == 200: new_list.append(i)
Die auch stürzte der Dolmetscher. Nun, auch wenn ich müssen einen anderen Weg finden, um die Ausarbeitung dieses Problems, erfuhr ich aus Ihrem Kommentar, danke!Lösung me_A:
Tun, beachten Sie, dass dies viel schneller, wenn Sie übergeben es der längste Liste erste.
Diese Lösung ersetzt eine Stufe der iteration mit einer set-lookup, mit der längsten Liste mit 200 Elemente, sollte es nicht überraschen, dass das fast 200-mal schneller.
Lösung me_B:
do_min_max() kann nicht wirklich etwas erreichen, auf Ihre Daten-set - jede Liste enthält sowohl 0 als auch addto zu berauben, eine Hebelwirkung - aber auf allgemeiner basis von Daten kann erheblich reduzieren das problem der Größe.
Die Einsparungen, die hier zu finden sind sukzessive reduziert die Anzahl der Elemente in jeder Stufe der iteration (Baumpfleger).
Verwenden: