for i in x:
funktioniert auf jedem iterierbaren, wie eine Liste oder einen Generator.
range(r)
oder xrange(r)
ist nur eine Liste von Zahlen (oder Generator einer solchen Liste). enumerate
ist eine praktische Möglichkeit, Zähler und Werte aus einer Liste zu generieren. Sie könnten das gleiche mit einer zip(range(len(alist)), alist)
tun.
for i, value in enumerate(alist):
alist[i] = foo(value)
ist, denke ich, ein gutes Beispiel für die Verwendung von Enumerate. Es bietet sowohl eine effiziente Möglichkeit zum Lesen der Werte als auch eine Möglichkeit, sie zu ändern.
Natürlich, wenn Sie mehr Kontrolle über die Iteration benötigen, gibt es immer die while
Schleife. Dies ist besonders nützlich, wenn Sie fortfahren oder brechen müssen oder wenn Sie den Index auf ungewöhnliche Weise ändern müssen.
Generatoren sind ein weiteres gutes Werkzeug zum Verpacken einer Iteration.
Persönlich mag ich das Listenverständnis (und die Generator- und Wörterbuchanalogen) am besten. Es ist eine gute Mischung aus Kontrolle und Kompaktheit.
Die Syntax ist absichtlich ungeschickt, um Sie davon abzuhalten, dies zu tun. 'enumerate' ist etwas besser. (Irgendwelche Gründe, warum Sie das letzte Element überspringen?) – user2357112
@ user2357112 nur neugierig, warum ist die bessere Wahl aufzuzählen? – Keatinge
@Racialz: Ein Satz weniger Klammern, und normalerweise, wenn Sie die Indizes wollen, wollen Sie immer noch die Werte. 'enumerate' gibt Ihnen beides. – user2357112