Ich möchte eine Liste durchlaufen, in der jedes Element mit dem darauf folgenden verglichen wird.
Gibt es eine Möglichkeit, mit x in y alle Elemente außer dem letzten zu durchlaufen? Ich würde es vorziehen, ohne Indizes zu verwenden, wenn ich kann.
Hinweis
freespace beantwortete meine eigentliche Frage, weshalb ich die Antwort akzeptierte, aber SilentGhost beantwortete die Frage, die ich hätte stellen sollen.
Entschuldigung für die Verwirrung.
y
ein Generator ist?Der einfachste Weg, das Sequenzelement mit dem folgenden zu vergleichen:
quelle
Wenn Sie alle Elemente in der Sequenz paarweise erhalten möchten, verwenden Sie diesen Ansatz (die paarweise Funktion stammt aus den Beispielen im Modul itertools).
Wenn Sie den letzten Wert mit einem bestimmten Wert vergleichen müssen, verketten Sie diesen Wert bis zum Ende
quelle
Wenn Sie das n-te Element mit dem n + 1-ten Element in der Liste vergleichen möchten, können Sie dies auch tun
Beachten Sie, dass dort keine feste Codierung stattfindet. Dies sollte in Ordnung sein, sofern Sie sich nicht anders fühlen.
quelle
So vergleichen Sie jedes Element mit dem nächsten in einem Iterator, ohne eine Liste zu instanziieren:
quelle
Dies beantwortet, was das OP hätte fragen sollen , dh eine Liste durchlaufen, in der aufeinanderfolgende Elemente verglichen werden (ausgezeichnete SilentGhost- Antwort), die jedoch für jede Gruppe ( n-Gramm ) verallgemeinert ist : 2, 3, ...
n
:zip(*(l[start:] for start in range(0, n)))
Beispiele:
Erklärungen:
l[start:]
generiert eine Liste / einen Generator ausgehend vom Indexstart
*list
oder*generator
: Übergibt alle Elemente an die umschließende Funktion,zip
als ob sie geschrieben worden wärezip(elem1, elem2, ...)
Hinweis:
AFAIK, dieser Code ist so faul wie möglich. Nicht getestet.
quelle