Преобразовать отсортированный список чисел, например, [1,2,3,4], в строку с указанием диапазона, например, «1-4» в Python.

1

У меня проблема в python.

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

Благодаря Girish

  • 4
    что ты уже испробовал?
  • 3
    Что делать, если они не в серии или непрерывно?
Показать ещё 1 комментарий
Теги:
list
range

4 ответа

0
Лучший ответ

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

if l == list(range(l[0], l[-1] + 1)):
    print('{}-{}'.format(l[0], l[-1]))
  • 0
    Спасибо, @blhsing. Это работает для меня.
1

Вы можете использовать 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
first = my_list[0]
last = my_list[-1]
text = f'{first}-{last}'
0
my_list = [1,2,3,5,8]
print """{0}-{1}""".format(my_list[0], my_list[-1])

Ещё вопросы

Сообщество Overcoder
Наверх
Меню