Identification de groupes de nombres consécutifs dans une liste
En Python, l'identification de groupes de nombres consécutifs dans une liste peut être réalisée par diverses méthodes. Voici une discussion des options disponibles :
1. Utilisation de la recette GroupBy de Python Docs :
Python fournit une recette élégante pour cette tâche. GroupBy parcourt les éléments de la liste énumérée, regroupant les nombres consécutifs :
from operator import itemgetter from itertools import groupby data = [2, 3, 4, 5, 12, 13, 14, 15, 16, 17] for k, g in groupby(enumerate(data), lambda (i,x):i-x): print(map(itemgetter(1), g))
Cela affichera des groupes de nombres consécutifs :
[2, 3, 4, 5] [12, 13, 14, 15, 16, 17]
2. Modification de la sortie GroupBy :
Pour obtenir le format de tuple demandé, vous pouvez modifier la sortie comme suit :
ranges = [] for k, g in groupby(enumerate(data), lambda (i,x):i-x): group = map(itemgetter(1), g) ranges.append((group[0], group[-1]))
Cela affichera :
[(2, 5), (12, 17)]
3. Implémentation personnalisée :
Vous pouvez également implémenter votre propre solution personnalisée :
ranges = [] for key, group in groupby(enumerate(data), lambda (index, item): index - item): group = map(itemgetter(1), group) if len(group) > 1: ranges.append(xrange(group[0], group[-1])) else: ranges.append(group[0])
Gestion des numéros individuels :
Pour renvoyer des numéros individuels en tant qu'éléments individuels, modifiez simplement le code d'implémentation personnalisé comme suit :
... if len(group) > 1: ranges.append(xrange(group[0], group[-1]+1)) else: ranges.append(group[0])
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!