Je voudrais parcourir une liste en vérifiant chaque élément par rapport à celui qui le suit.
Existe-t-il un moyen de parcourir tout sauf le dernier élément en utilisant for x in y? Je préférerais le faire sans utiliser d'index si je le peux.
Remarque
freespace a répondu à ma question, c'est pourquoi j'ai accepté la réponse, mais SilentGhost a répondu à la question que j'aurais dû poser.
Toutes mes excuses pour la confusion.
y
est un générateur?le moyen le plus simple de comparer l'élément de séquence avec ce qui suit:
la source
Si vous souhaitez obtenir tous les éléments de la séquence par paire, utilisez cette approche (la fonction par paire provient des exemples du module itertools).
Si vous avez besoin de comparer la dernière valeur à une valeur spéciale, chaînez cette valeur jusqu'à la fin
la source
si vous vouliez comparer le nième élément avec le n + 1 ème élément de la liste, vous pourriez aussi faire avec
notez qu'il n'y a pas de codage en dur là-bas. Cela devrait être correct, sauf si vous ressentez le contraire.
la source
Pour comparer chaque élément avec le suivant dans un itérateur sans instancier une liste:
la source
Cela répond à ce que l'OP aurait dû demander , c'est-à-dire parcourir une liste comparant des éléments consécutifs (excellente réponse SilentGhost ), mais généralisée pour tout groupe ( n-gramme ): 2, 3, ...
n
:zip(*(l[start:] for start in range(0, n)))
Exemples:
Explications:
l[start:]
génère une liste / générateur à partir de l'indexstart
*list
ou*generator
: passe tous les éléments à la fonction englobantezip
comme si elle avait été écritezip(elem1, elem2, ...)
Remarque:
AFAIK, ce code est aussi paresseux que possible. Pas testé.
la source