Преобразовать отсортированный список чисел, таких как [1,2,3,4], в строку, указывающую диапазон, например «1-4» в Python - PullRequest
0 голосов
/ 28 августа 2018

У меня проблема с питоном.

У меня есть отсортированный список чисел, например [1,2,3,4,5]. Мне нужно получить строку, указывающую диапазон, например "1-5", если отсортированные числа идут последовательно или непрерывно.

Спасибо Гириш

Ответы [ 3 ]

0 голосов
/ 28 августа 2018

Вы можете использовать more_itertools

import more_itertools

a=[1,2,3,4,5,8,9,10,12,13,14,15]

to_range = ["{}-{}".format(groups[0],groups[-1]) for groups in map(list,more_itertools.consecutive_groups(a))]

#['1-5', '8-10', '12-15']

Если диапазон должен содержать как минимум 2 элемента (т. Е. Для [1] 1-1 не допускается), вы можете добавить условия:

to_range = ["{}-{}".format(groups[0],groups[-1])  for groups in map(list,more_itertools.consecutive_groups(a)) if groups[0] != groups[-1]]
0 голосов
/ 28 августа 2018
first = my_list[0]
last = my_list[-1]
text = f'{first}-{last}'
0 голосов
/ 28 августа 2018

Учитывая l = [1,2,3,4,5], можно выполнить следующую проверку условия, если она состоит из последовательного списка целых чисел, перед форматированием вывода с первым и последним элементом в списке:

if l == list(range(l[0], l[-1] + 1)):
    print('{}-{}'.format(l[0], l[-1]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...