Seite 2 von 2
Verfasst: Freitag 4. März 2005, 00:47
von BlackJack
DasPinsch hat geschrieben:gleich noch ne Frage:
ist
for i in xrange(1000):
bla
schneller oder langsamer als
i = 0
while i < 1000:
bla
i += 1
?
irgendwie habe ich Angst, dass das Erstellen einer Liste viel Zeit in Anspruch nehmen könnte

Die Funktion `xrange()` erstellt im Gegensatz zu `range()` keine Liste sondern ein Objekt, das sich nur so verhält als wäre es eine Sequenz. Der Speicherverbrauch für `xrange(10)` ist der gleiche wie der für `xrange(100000)`.
An Deinem Primzahlentest finde ich "unpythonic", das er Schritt für Schritt dem Computer erklärt was er machen soll, aber für einen Menschen nicht "lesbar" ist. Man muss auch erstmal schauen was getan wird.
Schöner finde ich zum Beispiel dieses Rezept:
http://aspn.activestate.com/ASPN/Cookbo ... ipe/117119
Ich habe gerade ein wenig nach A* gesucht und es scheint den normalen
Dijkstra Algorithmus um eine Heuristik zu erweitern. Ich würde es erstmal mit dem normalen Dijkstra probieren und schauen ob der von der Geschwindigkeit her nicht ausreicht. Die Knotenmenge U verwaltet man am besten in einer Heap-Queue. Python liefert netterweise ein entprechendes Modul: 'heapq'. Das ist wesentlich schneller als Listen + sortieren.
Verfasst: Freitag 4. März 2005, 11:53
von Milan
Leonidas hat geschrieben:DasPinsch hat geschrieben:Zwei Sache ist mir noch aufgefallen, du schreibst immer:
x = x + 1
anstatt
x += 1, ist das 2. nicht schneller?
Sie sind gleich schnell, denn die Schreibweisen sind äquivalent.
HI. Das etwas äquivalent ist heißt noch lange nicht das es gleich schnell ist. x+=1 ist um einiges schneller als x=x+1, das hängt damit zusammen das im ersten Fall schon bekannt ist wohin das Ergebnis gespeichert werden soll und wo der Ausgangswert steht. Im 2. Fall wird erst gesagt, dass er nach x speichern soll und dann muss er rechts vom Gleichheitszeichen nochmal das x ausm speicher rauskramen.
Verfasst: Freitag 4. März 2005, 13:25
von Leonidas
Milan hat geschrieben: Das etwas äquivalent ist heißt noch lange nicht das es gleich schnell ist. x+=1 ist um einiges schneller als x=x+1, das hängt damit zusammen das im ersten Fall schon bekannt ist wohin das Ergebnis gespeichert werden soll und wo der Ausgangswert steht. Im 2. Fall wird erst gesagt, dass er nach x speichern soll und dann muss er rechts vom Gleichheitszeichen nochmal das x ausm speicher rauskramen.
Ja, hast recht, denn bei x = x + 1 wird zweimal nach x gesucht.. na, ich habe es mal in meinem Benchmark gefixt.