50 votes

convertir une liste d'entiers en plage en python

Existe-t-il quelque chose en python qui puisse convertir une liste croissante d'entiers en une liste d'intervalles ?

Par exemple, étant donné l'ensemble {0, 1, 2, 3, 4, 7, 8, 9, 11} je veux obtenir {0,4}, {7,9}, {11,11} }.

Je peux écrire un programme pour le faire, mais je voudrais savoir s'il existe une fonction intégrée dans Python.

0 votes

Eh bien, je peux dire avec assurance que je ne connais pas une telle fonction. Il est beaucoup plus difficile de dire avec certitude que quelque chose dont je n'ai pas connaissance n'existe pas.....

1 votes

Presque la même question a été posée et répondue dans stackoverflow.com/questions/3429510/

0 votes

Je pense que le résultat que vous proposez devrait en fait être une liste de plages cf. ma réponse ci-dessous !

1voto

Mike Amy Points 11

Je pense que les autres réponses sont difficiles à comprendre, et probablement inefficaces. J'espère que celle-ci est plus simple et plus rapide.

def ranges(ints):
    ints = sorted(set(ints))
    range_start = previous_number = ints[0]
    for number in ints[1:]:
        if number == previous_number + 1:
            previous_number = number
        else:
            yield range_start, previous_number
            range_start = previous_number = number
    yield range_start, previous_number

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X