
Wenn ich ein bisserl rumoptimiere (inkl. eurer Tricks), komme ich letzthin auf etwas von der Logik her ahnliches wie peter2, nur halt ohne Generatoren; und wenn es wirklich ein problem ist, kann man ja 'ne pyd benutzen: siehe Anhang. Meine Ergebnisse: Anzahl Listenelemente: 500000 Anzahl Loops: 20 Laufzeit pro Loop im Schnitt: boesi : 1.0696 sec (Alexander Bosecke) Peter : 1.4595 sec (Peter Otten - sauber) Peter2 : 1.2858 sec (Peter Otten - schnell) Gerson : 0.9656 sec (Gerson Kurz - schnell und leserlich) Gerson_pyd: 0.4391 sec (Gerson Kurz - Warum nicht gleich in Inline-Assembler ???) Bei meiner Losung ware noch eine Optimierung drin: inplace, dann spart man sich den alloc am Anfang => Qualliste ist hin. Die pyd-Losung ist naturlich absolut fehlerinsensitiv (z.b. durfte sie bei 0 elementen absturzen - nicht getestet schaut aber so aus).
@Gerson: es ist nicht grad die feine Art, einbuchstabige Variablennamen zu verwenden.
OK, ich habe das korrigiert!!! def Gerson(oo): """Gerson Kurz - schnell und leserlich""" oO = [None] * len(oo) if oo: Oo = oo[0] o0 = Oo OO_ = 0 for OO in oo: if OO - o0 > 1: if Oo != o0: oO[OO_] = `Oo` + `-o0` else: oO[OO_] = `Oo` OO_ += 1 Oo = OO o0 = OO if Oo != o0: oO[OO_] = `Oo` + `-o0` else: oO[OO_] = `Oo` OO_ += 1 return ",".join(oO[:OO_]) _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Gerson Kurz wrote:
Und wer hat Dir die Mähr erzählt, dass kurze Variablennamen Performance- vorteile bringen? -- Schönen Gruß - Regards Hartmut Goebel | Hartmut Goebel | IT-Security -- effizient | | h.goebel@goebel-consult.de | www.goebel-consult.de | _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hartmut Goebel wrote: | Und wer hat Dir die Mähr erzählt, dass kurze Variablennamen Performance- | vorteile bringen? Ich weiß jetzt nicht genau wie es intern arbeitet, aber ich denke über Hash values, da die Variable ja in globales oder locales nachgesucht wird, und diese dicts sind. Wenn die Hash funktion über längere Namen also mehr Zeit benötigt, ja, dann sollten diese höhere Performance bringen. Da die Hash Funktion aber schnell ist, ist der Vorteil maginal. Wichtiger währe darauf zu achten, daß es keine Hash Kollisionen gibt, aber dies ist eben so unwahrscheinlich wie beachtenswert ;) Gruß ~ Daniel - -- nihil me cirumdat .. . .. ... . . .. . ... . .. . ... . . . pgp key @ http://files.poelzi.org/pgp.txt ED80 E53D 5269 4BB1 1E73 3A53 CBF9 A421 0A7B 003D -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.4 (GNU/Linux) Comment: Using GnuPG with Debian - http://enigmail.mozdev.org iD8DBQFA2XwNy/mkIQp7AD0RAu8GAKC//UQahdrVwjmRTaT0u8mabFiksgCgrBE4 0G+rtjX/pgcSRHXXjMx612k= =oYv4 -----END PGP SIGNATURE----- _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Da Strings in python immutable sind, wird der hashwert wohl einmal gebildet - wahlweise bei Konstruktion oder lazy. Also spielt das keine Rolle. MfG Diez _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Hi Am 23.06.2004 10:43:37 schrieb Gerson Kurz:
Bei meiner Losung ware noch eine Optimierung drin: inplace, dann spart man sich den alloc am Anfang => Qualliste ist hin.
Was meinst du mit inplace? Die uebergebene Liste gleich als Ausgabeliste zu verwenden? Das bringt bei mir erst was, wenn der Speicher eng wird, offensichtlich kann Python Listen besser bearbeiten, wenn diese hauptsaechlich Daten vom Typ None enthalten. Da faellt dann wohl auch das erzeugen der extra Liste nicht sonderlich ins Gewicht. Anzahl Listenelemente: 1000000 Anzahl Loops: 1 Laufzeit pro Loop im Schnitt: boesi7 : 1.8212 sec (resListe[k] = `-last` + ',' + `element`) boesi8 : 1.8518 sec (liste[k] = `-last` + ',' + `element`, keine separate Liste) Anzahl Listenelemente: 5000000 Anzahl Loops: 1 Laufzeit pro Loop im Schnitt: boesi7 : 12.8621 sec (resListe[k] = `-last` + ',' + `element`) boesi8 : 9.6199 sec (liste[k] = `-last` + ',' + `element`, keine separate Liste)
Aber da sieht man sehr schoen, was eingebetteter C-Code leisten kann. Fazit: Algorithmen + das ganze "Drumherum" in Python entwickeln und bei Bedarf die Algorithmen einfach nach C uebersetzen. Ich weiss das steht in jedem Lehrbuch ueber Python, aber das auch mal an nem praktischen Beispiel demonstriert zu bekommen find ich gut.
hehe gefaellt mir, erinnert ein bisschen an COW, fehlt nur noch das m... :) cu boesi PS: in dem Zusammenhang faellt mir noch ein - ist es in Python moeglich zu bestimmen, wieviel Speicher ein Objekt belegt? (also ich meine keine elementaren Datentypen, sonder komplexe wie Listen oder Dictionaries) Mir faellt da spontan nur eine for-Schleife in einer rekursiven Funktion ein... -- So stellt sich der Atheist doch die #1671 : icq-intern Unsterblichkeit vor - Lokalverbot #73628288 : icq-extern auf dem Friedhof. boesi111 : aim i171 : reallife _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Darf ich mich einmischen? Als Newbie fällt mir auf: Warum wird die Liste nicht mit dem Modul Array verarbeitet? Wenn es um Effizients geht, soll eine Array schneller verarbeitet werden als herkömmliche Listen (gelesen in Ge-Packt, Seite 311). Grusz Mathias Sollte mein Beitrag unsinnig sein, bitte nicht beachten. -- Lieber lachende Pinguine als tanzende Büroklammern! CU in www.meeloon.de -- _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Mathias Uebel wrote:
Darf ich mich einmischen?
"Es ist leichter um Vergebung als um Erlaubnis zu bitten" - laut Google in comp.lang.python 1999 erstmals erwähnt vom Python-Neuling Alex Martelli :-)
Wenn alle glaubten, was in Büchern steht, hielten wir die Erde für eine Scheibe... Ich schlage vor, dass du dir eine schnelle Variante aus Alexanders Sammlung herauspickst, versuchst, sie auf Verwendung von array.array() umzuschreiben und dann die Zeiten misst. Messen ist wichtig - obwohl ich schon etwas länger mit Python arbeite, liege ich mit Vermutungen über die schnellste Variante immer noch zu oft falsch.
Sollte mein Beitrag unsinnig sein, bitte nicht beachten.
Ich ziehe es vor, dass man mich darauf hinweist, wenn ich etwas unsinniges behaupte, hätte deshalb diese Bemerkung unterlassen. Viel Spaß beim Programmieren und Messen. Teile uns doch deine Ergebnisse mit. Peter _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Peter Otten wrote: | Wenn alle glaubten, was in Büchern steht, hielten wir die Erde für eine | Scheibe... Hier mu0 ich mich einmischen :) Die Erde wurde seit 2000 Jahren nichtmehr als Scheibe angesehen, auch wenn viele Lehrbücher uns glauben machen wollen im Mittelalter wurde dies so gesehen. In Wirklichkeit gab es nur einen grichischen Apt der ca 500 n. Ch. behauptet, die Erde sein flach und VIERECKIG. Am oberen Ende sein Berg der die Jahreszeiten bestimmte, weil die Sonne im Sommer höher über ihn steige als im Winter. Ca 1880 hatte ein englischer Arzt und Kirchenhasser diese Behauptung benutzt um zu behaupten, daß die Kirche behauptet hätte, die Erde währe Flach. Tatsächlich hat dem griechischen Apt aber niemand, weder weltlich noch kirchlich geglaubt :) Ich will die Kirche nicht verteidigen, aber irgendjemand etwas falsches anzudichten ist, ob ich ihn nun leiden kann oder nicht, keine vertrettbare noch wissenschaftliche Vorgehensweise. Nachzulesen im "Neuen Lexikon der allgemeinen Irrtümer". Übrigens, ein sehr lesenswertes Buch; auch der erste Teil ist sehr empfehlenswert. Beide Werke sind sehr gut durch Quellen belegt und von mehreren Wissenschaftlern kontrolliert. Gruß ~ Daniel - -- nihil me cirumdat .. . .. ... . . .. . ... . .. . ... . . . pgp key @ http://files.poelzi.org/pgp.txt ED80 E53D 5269 4BB1 1E73 3A53 CBF9 A421 0A7B 003D -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.4 (GNU/Linux) Comment: Using GnuPG with Debian - http://enigmail.mozdev.org iD8DBQFA2qkLy/mkIQp7AD0RAqstAJ9DliavRwyXl3QgIFTU9N48o4xA/wCfZZ+s DZ+d5ykibNkhYnV5HCjefQw= =vdrr -----END PGP SIGNATURE----- _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Also Daniel! das ist einfach keine Art, uns unsere liebgewonnenen Ansichten austreiben zu wollen! Wenn das so weiter geht kommt noch einer und beweist uns, dass man aus Sauwetter keine Salami machen kann, weil da schliesslich Eselsflleisch reingehört und die Sizilianer ihren letzten Esel selbst gefressen haben !!! Robert ömu däich wou (das ist echtes Berndeutsch und nur einer ausgesuchten Minderheit von Wissenden verständlich) daniel.poelzleithner wrote:
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Hi Am 23.06.2004 16:47:36 schrieb Mathias Uebel:
Darf ich mich einmischen?
Klar darfst du
Wenn es um Effizients geht, soll eine Array schneller verarbeitet werden als herkömmliche Listen (gelesen in Ge-Packt, Seite 311).
Also fuer das konkrete Problem hier stimmt das wohl nicht: Anzahl Listenelemente: 1000000 Anzahl Loops: 3 Laufzeit pro Loop im Schnitt: boesi3 : 2.1362 sec (resListe.append('-' + `last` + ',' + `element`)) boesi7 : 1.9034 sec (resListe[k] = `-last` + ',' + `element`) boesi9 : 2.1395 sec (cStringIO) boesi10 : 13.1260 sec (Array) Unabhaengig von dieser Benchmark-Spielerei wuerde ich wohl cStringIO nutzen - gehoert mit zu den schenllsten Varianten und ist mit Abstand am besten lesbar (IMHO). cu boesi -- Ein sicherer Rechner steht ohne Netz und Strom in #1671 : icq-intern einem Schweizer Kellersafe, die Schwiegermutter #73628288 : icq-extern hält mit dem Nudelholz Wache vor der Kellertüre boesi111 : aim ... Und sicher sind die Daten trotzdem nicht ... i171 : reallife _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Gerson Kurz wrote:
Und wer hat Dir die Mähr erzählt, dass kurze Variablennamen Performance- vorteile bringen? -- Schönen Gruß - Regards Hartmut Goebel | Hartmut Goebel | IT-Security -- effizient | | h.goebel@goebel-consult.de | www.goebel-consult.de | _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hartmut Goebel wrote: | Und wer hat Dir die Mähr erzählt, dass kurze Variablennamen Performance- | vorteile bringen? Ich weiß jetzt nicht genau wie es intern arbeitet, aber ich denke über Hash values, da die Variable ja in globales oder locales nachgesucht wird, und diese dicts sind. Wenn die Hash funktion über längere Namen also mehr Zeit benötigt, ja, dann sollten diese höhere Performance bringen. Da die Hash Funktion aber schnell ist, ist der Vorteil maginal. Wichtiger währe darauf zu achten, daß es keine Hash Kollisionen gibt, aber dies ist eben so unwahrscheinlich wie beachtenswert ;) Gruß ~ Daniel - -- nihil me cirumdat .. . .. ... . . .. . ... . .. . ... . . . pgp key @ http://files.poelzi.org/pgp.txt ED80 E53D 5269 4BB1 1E73 3A53 CBF9 A421 0A7B 003D -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.4 (GNU/Linux) Comment: Using GnuPG with Debian - http://enigmail.mozdev.org iD8DBQFA2XwNy/mkIQp7AD0RAu8GAKC//UQahdrVwjmRTaT0u8mabFiksgCgrBE4 0G+rtjX/pgcSRHXXjMx612k= =oYv4 -----END PGP SIGNATURE----- _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Da Strings in python immutable sind, wird der hashwert wohl einmal gebildet - wahlweise bei Konstruktion oder lazy. Also spielt das keine Rolle. MfG Diez _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Hi Am 23.06.2004 10:43:37 schrieb Gerson Kurz:
Bei meiner Losung ware noch eine Optimierung drin: inplace, dann spart man sich den alloc am Anfang => Qualliste ist hin.
Was meinst du mit inplace? Die uebergebene Liste gleich als Ausgabeliste zu verwenden? Das bringt bei mir erst was, wenn der Speicher eng wird, offensichtlich kann Python Listen besser bearbeiten, wenn diese hauptsaechlich Daten vom Typ None enthalten. Da faellt dann wohl auch das erzeugen der extra Liste nicht sonderlich ins Gewicht. Anzahl Listenelemente: 1000000 Anzahl Loops: 1 Laufzeit pro Loop im Schnitt: boesi7 : 1.8212 sec (resListe[k] = `-last` + ',' + `element`) boesi8 : 1.8518 sec (liste[k] = `-last` + ',' + `element`, keine separate Liste) Anzahl Listenelemente: 5000000 Anzahl Loops: 1 Laufzeit pro Loop im Schnitt: boesi7 : 12.8621 sec (resListe[k] = `-last` + ',' + `element`) boesi8 : 9.6199 sec (liste[k] = `-last` + ',' + `element`, keine separate Liste)
Aber da sieht man sehr schoen, was eingebetteter C-Code leisten kann. Fazit: Algorithmen + das ganze "Drumherum" in Python entwickeln und bei Bedarf die Algorithmen einfach nach C uebersetzen. Ich weiss das steht in jedem Lehrbuch ueber Python, aber das auch mal an nem praktischen Beispiel demonstriert zu bekommen find ich gut.
hehe gefaellt mir, erinnert ein bisschen an COW, fehlt nur noch das m... :) cu boesi PS: in dem Zusammenhang faellt mir noch ein - ist es in Python moeglich zu bestimmen, wieviel Speicher ein Objekt belegt? (also ich meine keine elementaren Datentypen, sonder komplexe wie Listen oder Dictionaries) Mir faellt da spontan nur eine for-Schleife in einer rekursiven Funktion ein... -- So stellt sich der Atheist doch die #1671 : icq-intern Unsterblichkeit vor - Lokalverbot #73628288 : icq-extern auf dem Friedhof. boesi111 : aim i171 : reallife _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Darf ich mich einmischen? Als Newbie fällt mir auf: Warum wird die Liste nicht mit dem Modul Array verarbeitet? Wenn es um Effizients geht, soll eine Array schneller verarbeitet werden als herkömmliche Listen (gelesen in Ge-Packt, Seite 311). Grusz Mathias Sollte mein Beitrag unsinnig sein, bitte nicht beachten. -- Lieber lachende Pinguine als tanzende Büroklammern! CU in www.meeloon.de -- _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Mathias Uebel wrote:
Darf ich mich einmischen?
"Es ist leichter um Vergebung als um Erlaubnis zu bitten" - laut Google in comp.lang.python 1999 erstmals erwähnt vom Python-Neuling Alex Martelli :-)
Wenn alle glaubten, was in Büchern steht, hielten wir die Erde für eine Scheibe... Ich schlage vor, dass du dir eine schnelle Variante aus Alexanders Sammlung herauspickst, versuchst, sie auf Verwendung von array.array() umzuschreiben und dann die Zeiten misst. Messen ist wichtig - obwohl ich schon etwas länger mit Python arbeite, liege ich mit Vermutungen über die schnellste Variante immer noch zu oft falsch.
Sollte mein Beitrag unsinnig sein, bitte nicht beachten.
Ich ziehe es vor, dass man mich darauf hinweist, wenn ich etwas unsinniges behaupte, hätte deshalb diese Bemerkung unterlassen. Viel Spaß beim Programmieren und Messen. Teile uns doch deine Ergebnisse mit. Peter _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Peter Otten wrote: | Wenn alle glaubten, was in Büchern steht, hielten wir die Erde für eine | Scheibe... Hier mu0 ich mich einmischen :) Die Erde wurde seit 2000 Jahren nichtmehr als Scheibe angesehen, auch wenn viele Lehrbücher uns glauben machen wollen im Mittelalter wurde dies so gesehen. In Wirklichkeit gab es nur einen grichischen Apt der ca 500 n. Ch. behauptet, die Erde sein flach und VIERECKIG. Am oberen Ende sein Berg der die Jahreszeiten bestimmte, weil die Sonne im Sommer höher über ihn steige als im Winter. Ca 1880 hatte ein englischer Arzt und Kirchenhasser diese Behauptung benutzt um zu behaupten, daß die Kirche behauptet hätte, die Erde währe Flach. Tatsächlich hat dem griechischen Apt aber niemand, weder weltlich noch kirchlich geglaubt :) Ich will die Kirche nicht verteidigen, aber irgendjemand etwas falsches anzudichten ist, ob ich ihn nun leiden kann oder nicht, keine vertrettbare noch wissenschaftliche Vorgehensweise. Nachzulesen im "Neuen Lexikon der allgemeinen Irrtümer". Übrigens, ein sehr lesenswertes Buch; auch der erste Teil ist sehr empfehlenswert. Beide Werke sind sehr gut durch Quellen belegt und von mehreren Wissenschaftlern kontrolliert. Gruß ~ Daniel - -- nihil me cirumdat .. . .. ... . . .. . ... . .. . ... . . . pgp key @ http://files.poelzi.org/pgp.txt ED80 E53D 5269 4BB1 1E73 3A53 CBF9 A421 0A7B 003D -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.4 (GNU/Linux) Comment: Using GnuPG with Debian - http://enigmail.mozdev.org iD8DBQFA2qkLy/mkIQp7AD0RAqstAJ9DliavRwyXl3QgIFTU9N48o4xA/wCfZZ+s DZ+d5ykibNkhYnV5HCjefQw= =vdrr -----END PGP SIGNATURE----- _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Also Daniel! das ist einfach keine Art, uns unsere liebgewonnenen Ansichten austreiben zu wollen! Wenn das so weiter geht kommt noch einer und beweist uns, dass man aus Sauwetter keine Salami machen kann, weil da schliesslich Eselsflleisch reingehört und die Sizilianer ihren letzten Esel selbst gefressen haben !!! Robert ömu däich wou (das ist echtes Berndeutsch und nur einer ausgesuchten Minderheit von Wissenden verständlich) daniel.poelzleithner wrote:
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Hi Am 23.06.2004 16:47:36 schrieb Mathias Uebel:
Darf ich mich einmischen?
Klar darfst du
Wenn es um Effizients geht, soll eine Array schneller verarbeitet werden als herkömmliche Listen (gelesen in Ge-Packt, Seite 311).
Also fuer das konkrete Problem hier stimmt das wohl nicht: Anzahl Listenelemente: 1000000 Anzahl Loops: 3 Laufzeit pro Loop im Schnitt: boesi3 : 2.1362 sec (resListe.append('-' + `last` + ',' + `element`)) boesi7 : 1.9034 sec (resListe[k] = `-last` + ',' + `element`) boesi9 : 2.1395 sec (cStringIO) boesi10 : 13.1260 sec (Array) Unabhaengig von dieser Benchmark-Spielerei wuerde ich wohl cStringIO nutzen - gehoert mit zu den schenllsten Varianten und ist mit Abstand am besten lesbar (IMHO). cu boesi -- Ein sicherer Rechner steht ohne Netz und Strom in #1671 : icq-intern einem Schweizer Kellersafe, die Schwiegermutter #73628288 : icq-extern hält mit dem Nudelholz Wache vor der Kellertüre boesi111 : aim ... Und sicher sind die Daten trotzdem nicht ... i171 : reallife _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
participants (8)
-
Alexander 'boesi' Bösecke
-
daniel.poelzleithner
-
Diez B. Roggisch
-
Gerson Kurz
-
Hartmut Goebel
-
Mathias Uebel
-
Peter Otten
-
robert rottermann