Maison >développement back-end >Tutoriel Python >Comment puis-je itérer efficacement sur des paires (ou triples) d'éléments qui se chevauchent dans une liste Python ?
Itération sur des paires de valeurs qui se chevauchent en Python
Lorsque vous parcourez une liste en Python, vous devrez peut-être accéder à la fois à l'élément actuel et à l'élément actuel. élément suivant simultanément. Traditionnellement, cela a été accompli en utilisant du code tel que :
for current, next in zip(the_list, the_list[1:]): # Do something
Cependant, Python 3.8 a introduit un moyen plus efficace d'y parvenir :
Utilisation de la fonction par paire
La documentation Python fournit une simple fonction par paire à cet effet :
import itertools def pairwise(iterable): a, b = itertools.tee(iterable) next(b, None) return zip(a, b)
Cette fonction crée deux itérateurs, a et b, qui pointent vers le premier élément de l’itérable d’entrée. L'itérateur b est ensuite avancé d'un pas, ce qui fait que a pointe vers l'élément actuel et b pointe vers l'élément suivant. La fonction zip est ensuite utilisée pour créer des paires de ces éléments.
Pour Python 2
Pour Python 2, vous pouvez utiliser une fonction par paire similaire avec itertools.izip fonction au lieu de zip :
import itertools def pairwise(iterable): a, b = itertools.tee(iterable) next(b, None) return itertools.izip(a, b)
Généraliser à plusieurs Éléments
La fonction par paire peut être généralisée pour produire de plus grandes fenêtres d'éléments en ajustant le paramètre n dans l'appel tee. Par exemple, pour créer des paires de trois éléments, vous pouvez utiliser :
def threes(iterator): a, b, c = itertools.tee(iterator, 3) next(b, None) next(c, None) next(c, None) return zip(a, b, c)
Mise en garde
Il est important de noter que cette technique peut consommer une quantité importante de mémoire si un itérateur avance plus loin que les autres. Cela peut se produire lorsque la taille de la fenêtre est grande ou s'il y a de nombreux éléments dans l'itérable d'origine.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!