Maison >développement back-end >Tutoriel Python >Comment puis-je itérer efficacement sur des paires qui se chevauchent dans des listes Python ?

Comment puis-je itérer efficacement sur des paires qui se chevauchent dans des listes Python ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-14 14:13:10565parcourir

How Can I Efficiently Iterate Over Overlapping Pairs in Python Lists?

Technique de fenêtre coulissante pour itérer sur des paires qui se chevauchent

Lorsque vous travaillez avec des listes en Python, il est souvent nécessaire d'itérer sur des paires d'éléments qui se chevauchent . Une approche courante consiste à utiliser zip et zip[1:] pour créer deux itérateurs qui avancent indépendamment dans la liste. Cependant, il peut exister des moyens plus efficaces ou idiomatiques pour obtenir le même résultat.

Fonction par paire d'Itertools

Python 3.8 introduit la fonction par paire du module itertools. Cette fonction prend un itérable et renvoie un itérateur qui génère des paires d'éléments qui se chevauchent.

Pour les versions de Python inférieures à 3.8, une fonction similaire peut être implémentée à l'aide de tee :

def pairwise(iterable):
    "s -> (s0, s1), (s1, s2), (s2, s3), ..."
    a, b = itertools.tee(iterable)
    next(b, None)
    return zip(a, b)

Avantages de Pairwise

La fonction pairwise présente plusieurs avantages par rapport au zip traditionnel approche :

  • Elle ne crée que deux itérateurs, alors que l'approche zip en crée trois.
  • Elle peut être facilement adaptée pour produire des fenêtres coulissantes de n'importe quelle taille en utilisant le paramètre n de la fonction tee.
  • C'est une fonction intégrée et donc plus efficace qu'une fonction personnalisée mise en œuvre.

Conclusion

Bien que l'approche zip traditionnelle soit fonctionnelle, la fonction par paire fournit un moyen plus efficace et idiomatique d'itérer sur des paires d'éléments qui se chevauchent dans Python. Il est particulièrement utile pour créer des fenêtres glissantes de données à traiter ou à analyser.

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!

Déclaration:
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