@fail: So könnte man das machen, ja.
Ich würde `zahlen` anders benennen, damit die Bedeutung der Struktur deutlicher wird. Zum Beispiel `ist_primzahl`.
Die `Primzahlenliste` hält sich von der Schreibweise her nicht an den
Style Guide for Python Code. Und der Datentyp sollte auch nicht Bestandteil des Namens sein. Also zum Beispiel `primzahlen`. Der Name wird ziemlich früh definiert. An der Stelle wird er ja noch gar nicht benötigt. Und man könnte sich diese Liste komplett sparen wenn man einen Generatorausdruck für den Rückgabewert verwendet. Oder zumindest eine „list comprehension”.
Anstelle der ``while``-Schleife würde sich eine ``for``-Schleife anbieten.
Die Vergleiche von Wahrheitswerten mit literalen Wahrheitswerten sind überflüssig. Da kommt doch sowieso nur wieder ein Wahrheitswert heraus. In beiden Fällen der den man sowieso schon aus der Liste hatte.
Code: Alles auswählen
def sieve(limit):
ist_primzahl = [True] * (limit + 1)
ist_primzahl[0] = ist_primzahl[1] = False
for i in xrange(2, int(math.sqrt(limit)) + 1):
if ist_primzahl[i]:
for k in xrange(i * i, limit + 1, i):
ist_primzahl[k] = False
return (n for n, p in enumerate(ist_primzahl) if p)