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

kgm km-news3 at onlinehome.de
Fre Jun 18 16:35:37 CEST 2004


Hi,

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

Zeigt, wie lahm die Strings sind :-(

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

kein Schreibfehler, der Unterschied zu Python ist so groß :-(

Ich finde zwar, das Python die um vieles klarere Sprache ist, aber in der  
Praxis zählen eben auch die Laufzeiten immer noch. Vermutlich ist das mit  
ein Grund, warum in den mir bekannten Firmen Perl und nicht Python  
eingesetzt wird...
Natürlich sollte man dieses Beispiel nicht zu sehr verallgemeinern, aber  
die Tendenz (Python langsamer) wird schon stimmen.

[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)

liste = []
starttime = time.clock()
for i in xrange(anzahl):
     liste.append(str(i)+' ')
r = "".join(liste)
#print r
print "Laufzeit Liste: %3.4f sec" % (time.clock() - starttime)


[2] Perl
use Time::HiRes qw(usleep ualarm gettimeofday tv_interval);
$anzahl = 100;
print "Perl: Anzahl=$anzahl\n";
$stri = '';
$t0 = [gettimeofday];
foreach(0 .. $anzahl-1)
{
	$stri .= $_ . ' ';
}
$t0t = tv_interval $t0;
#print "$stri\n";
print "Laufzeit String: $t0t\n";

@liste = ();
$t0 = [gettimeofday];
foreach(0 .. $anzahl-1)
{
	push @liste, $_;
}
$stri2 = join ' ', @liste;
$t0t = tv_interval $t0;
#print "$stri2\n";
print "Laufzeit Liste: $t0t\n";

-- 
Mit freundlichen Grüßen
Klaus Meyer :-)