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 ?

Comment puis-je itérer efficacement sur des paires (ou triples) d'éléments qui se chevauchent dans une liste Python ?

Mary-Kate Olsen
Libérer: 2024-12-16 14:53:17
original
489 Les gens l'ont consulté

How Can I Efficiently Iterate Over Overlapping Pairs (or Triples) of Elements in a Python List?

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

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

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

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

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!

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