Maison > développement back-end > Tutoriel Python > Comment identifier et regrouper des numéros consécutifs dans une liste Python ?

Comment identifier et regrouper des numéros consécutifs dans une liste Python ?

Susan Sarandon
Libérer: 2024-12-08 17:47:11
original
684 Les gens l'ont consulté

How to Identify and Group Consecutive Numbers in a Python List?

Identifier les nombres consécutifs dans une liste

La tâche consiste à diviser une liste en groupes de nombres consécutifs. Chaque groupe ne doit comprendre que des nombres consécutifs. La sortie doit conserver des nombres individuels et ne pas les combiner en plages.

Solution :

En Python, vous pouvez utiliser la fonction groupby intégrée avec une clé personnalisée atteindre ceci :

from itertools import groupby
from operator import itemgetter

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

Explication :

  1. enumerate(data) crée une liste de paires, où chaque paire est constituée d'un index (à partir de 0) et l'élément correspondant dans data.
  2. La fonction lambda (lambda (index, item) : index - item) calcule la différence entre l'index et la valeur de l'élément. Cette différence sert de clé pour le regroupement.
  3. groupby partitionne la liste de paires en groupes consécutifs en fonction de la clé. Chaque groupe contient des éléments avec la même différence.
  4. Pour récupérer les plages de nombres consécutifs, nous mappons les paires de chaque groupe à leur deuxième élément (le nombre réel) à l'aide de map(itemgetter(1), group).
  5. Nous vérifions si chaque groupe contient plus d'un numéro. Si tel est le cas, nous créons une plage pour ces nombres et l’ajoutons aux plages. Sinon, nous ajoutons simplement le nombre aux plages.

Exemple de sortie :

data = [2, 3, 4, 5, 12, 13, 14, 15, 16, 17, 20]
ranges = [xrange(2, 5), xrange(12, 17), 20]
Copier après la connexion

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