Я имею дело со списком целых чисел, обозначающих страницы, на которых было найдено ключевое слово. Я хотел бы создать блок кода, который преобразует этот список в строку определенного формата, соответствующую некоторым простым правилам. Одиночные целые числа преобразуются в строку. Последовательные целые числа рассматриваются как интервалы (левая граница, дефис, правая граница), а затем преобразуются в строку. Каждое преобразование разделяется запятой. Это пример ввода и ожидаемого результата:
Он не распознает, что только два последовательных числа не считаются интервалом: «22, 23», а не «22-23», а также «62, 63» а не "62-63".
Как можно решить этот вопрос? Есть ли более простой и эффективный способ выполнить преобразование?
Я имею дело со списком целых чисел, обозначающих страницы, на которых было найдено ключевое слово. Я хотел бы создать блок кода, который преобразует этот список в строку определенного формата, соответствующую некоторым простым правилам. Одиночные целые числа преобразуются в строку. Последовательные целые числа рассматриваются как интервалы (левая граница, дефис, правая граница), а затем преобразуются в строку. Каждое преобразование разделяется запятой. Это пример ввода и ожидаемого результата: [code]input = [4, 5, 6, 7, 8, 9, 10, 22, 23, 26, 62, 63, 113, 137, 138, 139] expected_output = "4-10, 22, 23, 26, 62, 63, 113, 137-139" [/code] Я написал этот код: [code]res = [4, 5, 6, 7, 8, 9, 10, 22, 23, 26, 62, 63, 113, 137, 138, 139]
if len(res)>0: resStr = str(res[0]) isConsecutive = False for index in range(1, len(res)): diff = res[index] - res[index-1] if diff == 1: isConsecutive = True if index == len(res)-1: resStr = resStr + "-" + str(res[index]) continue else: if isConsecutive: isConsecutive = False resStr = resStr + "-" + str(res[index-1]) + ", " + str(res[index]) else: resStr = resStr + ", " + str(res[index])
print(res) print(resStr) [/code] Этот код дает мне результат: [code]4-10, 22-23, 26, 62-63, 113, 137-139 [/code] Он не распознает, что только два последовательных числа не считаются интервалом: «22, 23», а не «22-23», а также «62, 63» а не "62-63". Как можно решить этот вопрос? Есть ли более простой и эффективный способ выполнить преобразование?