Maison >développement back-end >Tutoriel Python >Comment identifier des groupes de numéros consécutifs dans les listes Python ?
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!