Maison >développement back-end >Tutoriel Python >Comment identifier des groupes de numéros consécutifs dans les listes Python ?

Comment identifier des groupes de numéros consécutifs dans les listes Python ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-20 15:11:10717parcourir

How to Identify Consecutive Number Groups in Python Lists?

Identification de groupes de numéros consécutifs

En Python, l'identification de groupes de numéros consécutifs au sein d'une liste peut être obtenue à l'aide de l'itertools.groupby( ) fonction. Voici comment cela fonctionne :

Fonction itertools.groupby()

La fonction groupby() regroupe les éléments d'un itérable en fonction d'une fonction clé. Dans ce cas, nous définissons une fonction clé qui calcule la différence entre l'index d'un élément et sa valeur. Les nombres consécutifs auront la même clé, menant à leur regroupement.

Mise en œuvre du code :

Considérez l'exemple de liste [2, 3, 4, 5, 12, 13 , 14, 15, 16, 17, 20]. Le code ci-dessous utilise groupby() pour identifier les groupes de numéros consécutifs :

from itertools import groupby
from operator import itemgetter

data = [2, 3, 4, 5, 12, 13, 14, 15, 16, 17, 20]
ranges = []

for k, g in groupby(enumerate(data), lambda (i, x): i - x):
    group = map(itemgetter(1), g)
    if len(group) > 1:
        ranges.append(tuple(group[0], group[-1]))
    else:
        ranges.append(group[0])

Comprendre la fonction clé :

La fonction lambda (lambda (i, x) : i - x) calcule la différence entre l'indice (i) et la valeur (x) d'un élément. Cette différence nous permet de regrouper des nombres consécutifs. Par exemple, pour le chiffre 2, la différence serait de 0, et pour le chiffre 12, la différence serait de 10.

Traitement des éléments groupés :

Pour chaque key (différence), groupby() produit un objet générateur (g) contenant les éléments groupés correspondants. Nous convertissons ce générateur en liste en utilisant map() et itemgetter() pour extraire uniquement les valeurs des éléments.

Filtrage et ajout des résultats :

Nous vérifions la longueur de les éléments regroupés pour déterminer s'il est supérieur à 1, indiquant des nombres consécutifs. Si tel est le cas, nous ajoutons un tuple du premier et du dernier élément du groupe à la liste des plages. Pour les numéros individuels, nous ajoutons le numéro lui-même.

Sortie :

La liste des plages contiendra les groupes suivants de nombres consécutifs :

[(2, 5), (12, 17), 20]

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