itertools.product MemoryError

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Sagt mal ist das wirklich so gewollt oder ein Design-Fehler ?

Ich bekomme desöfteren einen MemoryError beim Nutzen der "itertools.product"-Funktion.
In Anahme das die Funktion tatsächlich wie in der Doku aussieht:

Code: Alles auswählen

def product(*args, **kwds):
        pools = map(tuple, args) * kwds.get('repeat', 1)
        result = [[]]
        for pool in pools:
            result = [x+[y] for x in result for y in pool]
        for prod in result:
            yield tuple(prod)
Ist auch klar warum bei einer hohen Anzahl ein MemoryError geworfen wird, da "result" schlicht zu groß wird.

Meine Frage ist jetzt: Warum wird hier "result" kein Generatorausdruck zugewiesen, gibt es dafür irgendeinen bestimmten Grund?
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Xynon1 hat geschrieben:Meine Frage ist jetzt: Warum wird hier "result" kein Generatorausdruck zugewiesen, gibt es dafür irgendeinen bestimmten Grund?
Steht doch da, dass das in der tatsächlichen Implementierung nicht so gemacht wird:
This function is equivalent to the following code, except that the actual implementation does not build up intermediate results in memory:
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher

http://ms4py.org/
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Ah, danke hatte ich überlesen.

Eine Frage noch, wo kann man eigentlich von den Nicht-Source-Modulen die Quelltexte einsehen, findet man die irgendwo im Netz?
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Danke
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Antworten