Помогите доработать функцию,которая определяет последовательные числа в массиве(если такие имеются),а если нет таких,то возвращает само число

Имею число в строковом виде. Надо определить состоит ли это число из последовательных чисел.Если это так,то функция выводит первое последовательное порядковое число,а если нет,то возвращает само число.Писала код с помощью срезов. У меня получилось вот что:

def find(s):
    for i in range(1,len(s)):
        if int(s[i:i+i])- int(s[:i])==1:
            return int(s[:i])
    return int(s)

Для строк s="17181920", s="1234567891011", s="7263723" функция работает, выводит 17, 1 и 7263723, а вот для s="91011" и s="99100" функция вместо 9 и 99 возвращает 91011 и 99100. Ещё подумала, переделала:\

def find(s):
   list1=[]
   list2=[]
   for i in range(1,len(s)):
       list1.append(s[:i])
       list2.append(s[1:i+1])
       for i in list1:
           for j in list2:
               if int(j)-int(i)==1:
                   return int(i)
  return int(s)

В этом случае функция для s="91011" выводит 9, а для s="17181920" уже возвращает 17181920 вместо ожидаемого 17. Я пробовала найти все комбинации:

res=[s[i:j]for i in range(len(s))for j in range(i+1,len(s)+1)]

и с помощью from itertools import combinations выбрать подходящую:

tot=[pair for pair in combinations(res,2)if int(pair[1])-int(pair[0])==1]

Все напрасно! Я новичек, буду благодарна любой подсказке! Что я делаю не так?


Ответы (1 шт):

Автор решения: Amgarak

Не рискну сказать, что работает верно, так как возможно не очень уловил суть задачи, но для предоставленных данных ожидаемый вывод:

def find(s):
    length = len(s)
    
    for i in range(1, length):
        num = int(s[:i])
        temp = i
        while temp < length and int(s[temp:temp + len(str(num + 1))]) == num + 1:
            temp += len(str(num + 1))
            num += 1
        
        if temp == length:
            return int(s[:i])

    return int(s)

# Примеры использования
print(find("17181920"))  # Вывод: 17
print(find("1234567891011"))  # Вывод: 1
print(find("7263723"))  # Вывод: 7263723
print(find("91011"))  # Вывод: 9
print(find("99100"))  # Вывод: 99
→ Ссылка