L'identification de groupes de nombres consécutifs dans une liste est une tâche courante qui se produit dans divers scénarios de programmation.
Heureusement, les fonctions et modules intégrés de Python fournissent des solutions élégantes pour cela problème. Une approche exploite la fonction groupby() et l'expression lambda :
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))
Cet extrait regroupe les nombres consécutifs en fonction de la différence entre leur index et leur valeur, garantissant que les éléments de chaque groupe sont consécutifs.
Si le résultat souhaité est une liste de tuples représentant la plage de nombres consécutifs, la modification suivante peut être apportée :
ranges = [] for k, g in groupby(enumerate(data), lambda (i, x): i - x): group = map(itemgetter(1), g) ranges.append((group[0], group[-1]))
Alternativement, une solution personnalisée peut être implémentée à l'aide d'une boucle et d'une compréhension de liste :
ranges = [] for i in range(len(data)): if i == len(data) - 1 or data[i] + 1 != data[i + 1]: ranges.append((data[i], data[i])) else: start = i while i + 1 < len(data) and data[i] + 1 == data[i + 1]: i += 1 ranges.append((data[start], data[i]))
Cette approche parcourt la liste, identifiant les indices de début et de fin de chaque groupe consécutif et en les ajoutant à la liste des plages.
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!