Maison >développement back-end >Tutoriel Python >Comment itérer efficacement sur des paires (et des triples) qui se chevauchent dans des listes Python ?
Comment itérer des paires de valeurs qui se chevauchent à partir d'une liste
Lorsque vous travaillez avec des listes en Python, il est souvent nécessaire de parcourir les valeurs par paires. Une approche courante consiste à utiliser une construction telle que :
for current, next in zip(the_list, the_list[1:]): # Do something
Pendant que ce code fonctionne, il existe une solution plus idiomatique et plus efficace utilisant la fonction par paire du module itertools. Voici une implémentation révisée de Python 3.8 :
import itertools def pairwise(iterable): "s -> (s0, s1), (s1, s2), (s2, s3), ..." a, b = itertools.tee(iterable) next(b, None) return zip(a, b)
Pour Python 2, utilisez itertools.izip au lieu de zip (puisque zip dans Python 2 crée une liste au lieu d'un itérateur paresseux).
Le La fonction par paire fonctionne en créant deux itérateurs parallèles, a et b, pointant vers le même premier élément. b est ensuite avancé d'un pas en utilisant next. La fonction izip combine les éléments des deux itérateurs pour former des paires qui se chevauchent.
Cette approche peut également être généralisée pour gérer des « fenêtres » de valeurs plus grandes. Par exemple, pour parcourir des triples de valeurs, utilisez la fonction suivante :
def threes(iterator): "s -> (s0, s1, s2), (s1, s2, s3), (s2, s3, 4), ..." a, b, c = itertools.tee(iterator, 3) next(b, None) next(c, None) next(c, None) return zip(a, b, c)
Attention : Il est important de noter que si l'un des itérateurs avance plus loin que les autres en raison de la En utilisant next, l'implémentation conservera les éléments consommés en mémoire jusqu'à ce que tous les itérateurs les aient consommés.
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!