Maison > développement back-end > Tutoriel Python > Comment puis-je parcourir des listes par paires ou par groupes en Python ?

Comment puis-je parcourir des listes par paires ou par groupes en Python ?

Susan Sarandon
Libérer: 2024-12-25 10:53:50
original
182 Les gens l'ont consulté

How Can I Iterate Over Lists in Pairs or Groups in Python?

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)
Copier après la connexion

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))
Copier après la connexion

Sortie :

1 + 2 = 3
3 + 4 = 7
5 + 6 = 11
Copier après la connexion

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)
Copier après la connexion

Utilisation

for x, y in grouped(l, 2):
    print("{} + {} = {}".format(x, y, x + y))
Copier après la connexion

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)
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal