Zugriff auf Elemente mit Offsets in Python's für .. in Loops

Ich habe mich mit Python ein bisschen verpasst, und ich habe gesammelt, dass es normalerweise besser ist (oder "pythonisch") zu benutzen

for x in SomeArray: 

Eher als die mehr C-Stil

 for i in range(0, len(SomeArray)): 

Ich sehe die Vorteile in diesem, vor allem sauberer Code, und die Fähigkeit, die schöne map() und verwandte Funktionen verwenden. Allerdings bin ich oft mit der Situation konfrontiert, wo ich gleichzeitig auf Elemente unterschiedlicher Offsets im Array zugreifen möchte. Zum Beispiel möchte ich das aktuelle Element dem Element zwei Schritte dahinter hinzufügen. Gibt es einen Weg, dies zu tun, ohne auf explizite Indizes zurückzugreifen?

2 Solutions collect form web for “Zugriff auf Elemente mit Offsets in Python's für .. in Loops”

Der Weg, dies in Python zu tun ist:

 for i, x in enumerate(SomeArray): print i, x 

Der enumerate erzeugt eine Folge von 2-Tupeln, die jeweils den Array-Index und das Element enthalten.

List indexing und zip () sind deine Freunde.

Hier ist meine Antwort für Ihre spezifischere Frage:

Ich möchte das aktuelle Element dem Element zwei Schritte hinter sich hinzufügen. Gibt es einen Weg, dies zu tun, ohne auf explizite Indizes zurückzugreifen?

 arr = range(10) [i+j for i,j in zip(arr[:-2], arr[2:])] 

Sie können auch das Modul numpy verwenden, wenn Sie beabsichtigen, auf numerischen Arrays zu arbeiten. Zum Beispiel kann der obige Code eleganter geschrieben werden als:

 import numpy narr = numpy.arange(10) narr[:-2] + narr[2:] 

Das Hinzufügen des n-ten Elements zum (n-2) -ten Element ist gleichbedeutend mit dem Hinzufügen des m-ten Elements zum (m + 2) -Element (für die mathematisch geneigten, die Substitution n-> m + 2). Der Bereich von n ist [2, len (arr)) und der Bereich von m ist [0, len (arr) -2). Beachten Sie die Klammern und Klammern. Die Elemente von 0 bis len (arr) -3 (Sie schließen die letzten beiden Elemente aus) wird als [: -2] indiziert, während Elemente von 2 bis len (arr) -1 (Sie schließen die ersten beiden Elemente aus) als [ 2:].

Ich gehe davon aus, dass Sie bereits Listenverständnisse kennen.

  • Tkinter loop und serial schreiben
  • Python: Zusammenführen von Tally-Daten
  • Warum funktioniert das bei der Schleife nicht?
  • Python - Vorherige und nächste Werte innerhalb einer Schleife
  • Wie mache ich eine Schleife, die jeden Tag eines bestimmten Monats berücksichtigt?
  • Faktorisierung einer Zahl in Python
  • Navigieren von Paginierung mit Selen
  • Wie gehe ich zum nächsten Index?
  • Ändern der Anzahl der Iterationen in einer for-Schleife
  • Python - check am Ende der Schleife, wenn man wieder laufen muss
  • Python-Skript, das eine iterierende Google-Suche ausführt und die Top-Ergebnisse und Links druckt
  • Python ist die beste Programmiersprache der Welt.