2016-05-13 4 views
2

Ich bin auf der Suche nach einer Python-Methode, die über eine Liste mit Indexwerten anstelle der eigentlichen Elemente iteriert. Der Code tut genau das:Gibt es eine integrierte Python-Methode, die über eine Liste mit Indexwerten anstelle von Elementen iteriert

Ich suche, ob es bereits eine Funktion gibt, die das tut oder wenn ich es selbst hinzufügen sollte.

+1

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

+0

@ user2357112 nur neugierig, warum ist die bessere Wahl aufzuzählen? – Keatinge

+1

@Racialz: Ein Satz weniger Klammern, und normalerweise, wenn Sie die Indizes wollen, wollen Sie immer noch die Werte. 'enumerate' gibt Ihnen beides. – user2357112

Antwort

7

Verwendung enumerate:

for index, ignore_this_its_the_value in enumerate(list): 
    # do stuff 

Aber tatsächlich:

for index in range(len(list)): 
    # do stuff 

die richtigen Indizes erzeugt.

+3

Es ist idiomatisch, einen einzelnen Unterstrich für eine unbenutzte Variable zu verwenden: 'für i, _ in enumerate (...)' –

1

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.

Verwandte Themen