Dietmar Schwertberger, 28.03.2012 00:58:
Wenn du zuerst eine Liste mit der richtigen Länge anlegst und dann alles mit PyList_SetItem füllst, wirds auch noch ein bischen schneller.
Mit Betonung auf "bisschen", zumindest unter Linux. Unter Windows (und wohl auch Solaris) scheint die Speicherverwaltung so schlecht zu sein, dass es da merkliche Unterschiede geben kann, aber auf vernünftigen Betriebsystemen stellt das realloc() für das Listenarray unter normalen "genug Speicher da" Bedingungen kein Problem dar. Und Python's eigene Speicherverwaltung schlägt da ja auch nochmal zu und mildert das Problem insbesondere unter Windows merklich ab. Mir ist es zumindest nicht gelungen, einen wirklichen Unterschied zwischen einer List-Comprehension in Cython und dem C-API-Code mit PyList_SetItem() zu messen, zumindest wenn das Erstellen der Objekte auch nur annähernd nicht-trivial ist. In Einzelfällen mag es einen Unterschied machen, aber da würde ich erstmal abwarten, ob jetzt genau das auch wirklich ein Problem in meinem Programm darstellt. Stefan