Itération par paires sur les listes
Itérer sur des éléments par paires est une exigence courante lors de la manipulation de listes. Cependant, la norme pour les boucles et les compréhensions de listes en Python ne fournit pas de solution intégrée pour le parcours par paire.
Implémentation par paires
Pour surmonter cette limitation, un une fonction personnalisée appelée pairwise() peut être implémentée. Cette fonction prend un itérable en entrée et renvoie des paires d'éléments.
def pairwise(iterable): "s -> (s0, s1), (s2, s3), (s4, s5), ..." a = iter(iterable) return zip(a, a)
Utilisation
En utilisant cette fonction pairwise(), vous pouvez parcourir les éléments par paires comme suit :
l = [1, 2, 3, 4, 5, 6] for x, y in pairwise(l): print("{} + {} = {}".format(x, y, x + y))
Sortie :
1 + 2 = 3 3 + 4 = 7 5 + 6 = 11
Regroupement généralisé
Pour les cas où vous devez parcourir éléments en groupes de n'importe quelle taille, une fonction plus généralisée appelée grouped() peut être utilisé.
def grouped(iterable, n): "s -> (s0,s1,s2,...sn-1), (sn,sn+1,sn+2,...s2n-1), (s2n,s2n+1,s2n+2,...s3n-1), ..." return zip(*[iter(iterable)] * n)
Utilisation
for x, y in grouped(l, 2): print("{} + {} = {}".format(x, y, x + y))
Vérification de type avec Mypy
Pour les utilisateurs de Python 3 souhaitant effectuer vérification de type avec Mypy, la fonction grouped() peut être annotée comme suit :
from typing import Iterable, Tuple, TypeVar T = TypeVar("T") def grouped(iterable: Iterable[T], n=2) -> Iterable[Tuple[T, ...]]: """s -> (s0,s1,s2,...sn-1), (sn,sn+1,sn+2,...s2n-1), ...""" return zip(*[iter(iterable)] * n)
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!