Zuallererst: Python for
-Schleifen sind nicht wirklich dasselbe wie eine C for
-Schleife. Es handelt sich stattdessen um For Each-Schleifen. Dabei wird über die Elemente eines Iterators iteriert. range()
erzeugt eine Sequenz von ganzen Zahlen, mit der du den häufigsten Anwendungsfall einer C for
-Schleife nachahmen kannst.
Allerdings möchtest du die meiste Zeit nicht range()
verwenden. Du würdest stattdessen über die Liste selbst iterieren:
for elem in reversed(some_list):
# elem ist ein Listenwert
Wenn du einen Index benötigst, verwendest du in der Regel enumerate()
, um ihn der Schleife hinzuzufügen:
for i, elem in reversed(enumerate(some_list)):
# elem ist ein Listenwert, i ist sein Index in der Liste
Für wirklich 'verrückte' Schleifen solltest du while
verwenden oder deine eigene Generatorfunktion erstellen:
def halved_loop(n):
while n > 1:
yield n
n //= 2
for i in halved_loop(10):
print i
um 10
, 5
, 2
zu drucken. Das kannst du auch auf Sequenzen erweitern:
def halved_loop(sequence):
n = -1
while True:
try:
yield sequence[n]
except IndexError:
return
n *= 2
for elem in halved_loop(['foo', 'bar', 'baz', 'quu', 'spam', 'ham', 'monty', 'python']):
print elem
was folgendes ausgibt:
python
monty
spam
foo