[Python-de] Re: Laufzeit Python List vs String vs Perl

Tomasz Bieruta bieruta at gmx.net
Son Jun 20 03:01:39 CEST 2004


Hi,

ich glaube, du hast ein Paar Fehler gemacht, siehe weiter:


[...]
> durch Jans List-Optimierung angeregt, habe ich nochmal
> String-Concatination mit der Listen-Lösung verglichen, Source [1]:
>
> Python: Anzahl=100000
> Laufzeit String: 192.2077 sec
> Laufzeit Liste: 0.4875 sec
>
[...]

> Das gleiche jetzt nochmal in einer Perl-Variante [2], natürlich auf dem
> gleichen Rechner gemessen:
>
> Perl: Anzahl=100000
> Laufzeit String: 0.220316
> Laufzeit Liste: 0.260375
>
> [1] Python
> import time
> anzahl = 100
> print "Python: Anzahl=" + str(anzahl);
> stri = ""
> starttime = time.clock()
> for i in xrange(anzahl):
>      stri += str(i)+' '
> #print stri
> print "Laufzeit String: %3.4f sec" % (time.clock() - starttime)

normaler Pythonentwickler würde sowas nie tun.

> liste = []
> starttime = time.clock()
> for i in xrange(anzahl):
>      liste.append(str(i)+' ')   <<<<<<---- wieso str(i) + ' ' für mich hat
das kein Sinn, denn besser ist den Leerzeichen
in " ".join(liste) zu schreiben, übrigens genauso wie bei deiner Perl
Version
> r = "".join(liste)
> #print r
> print "Laufzeit Liste: %3.4f sec" % (time.clock() - starttime)
>

Ausserdem besser ist vielleicht sowas:

liste = [str(i) for i in range(anzahl)]
r = " ".join(liste)

oder noch schneller
liste = map(str, xrange(anzahl))
r = " ".join(liste)


Nur noch eine Bemerkung: Nicht nur Schnelligkeit ist von Bedeutung, wichtig
ist auch wie schnell kannst du das Problem lösen. Da glaube ich wirst du mit
Perl nicht wesentlich schneller. OOP hilft auch grössere Projekte besser zu
verwalten. Es gibt noch psyco. Ich muss dich ja aber nicht über
Pythonvorteile überzeugen (das habe ich aus deinen emails jedenfalls so
empfunden). Die Frage ist, wie überzeugt man den Chef ?
Vielleicht hilft dir meine Überzeugungskraft. Ich konnte nämlich mit Python
schnellere Programme entwickeln, als einige in C ?! Wie geht das ? Denke nur
 daran, mit Python hast du bereits alles nötige: Objekte, Dictionaries,
schnelle Listen usw. Python erlaubt dir die Datenstrukturen besser zu
definieren, man konzentriert sich nicht auf das Implementieren, sondern auf
Design. Es stören keine lästige Pointer.
typische Fehler, die in diesen langsamen C Programmen war die
Listenbearbeitung (Suchen in Listen etc.), man hatte zu oft verschachtelte
for-Schleifen benutzt. Natürlich hätte der Programmierer das richtig
implemetiert, wäre ich nie mit Python performater gewesen.

Überlege, warum man heutzutage nicht mit assembler programmiert.

Gruss
Tom