@schneitzmaster: `numpy.dot()` ist schlecht mit so etwas vergleichbar. Da werden intern Operationen auf Werten von „Prozessor-Datentypen” in reinem C-Code (oder manchmal auch Fortran-Code) und je nach Prozessor vielleicht auch noch parallelisiert, ausgeführt.
Wenn das mit einer ``for``-Schleife und `append()` funktioniert, dann kannst Du auch eine äquivalente „list comprehension” (LC) schreiben. Mein erstes Beispiel sollte da eigentlich funktionieren. Da wird ja noch „slicing” verwendet. Eine LC ist auch ein ganz kleines bisschen schneller als eine ``for``-Schleife. Ohne unleserlich zu werden, dürfte wohl folgendes in reinem Python das Limit darstellen:
Code: Alles auswählen
elements = PC_ABS.elements
pc_elements = [
elements[element.label - 1:element.label] for element in PC_SET.elements
]
Nächster Schritt wäre dann Cython, um den Mehraufwand des Bytcode-Interpretierens zu vermeiden. Wobei das nicht allzu viel bringen dürfte.
Das ganze steckt hoffentlich in einer Funktion‽ Davon abgesehen, dass das sauberer ist, werden lokale Namen auch schneller aufgelöst als (modul)globale Namen.
Dein Beispiel zur Illustration hilft übrigens nicht viel weiter weil alles was mit `PC_SET` zu tun hat, nicht relevant ist. Einzig die letzten beiden Zeilen zeigen das gewünschte Ergebnis. Du möchtest in der Liste also keine Elemente aus `PC_ABS.elements` haben, sondern ein „slice” von diesem Objekt welches immer genau ein Element enthält.