Помогите доработать функцию,которая определяет последовательные числа в массиве(если такие имеются),а если нет таких,то возвращает само число
Имею число в строковом виде. Надо определить состоит ли это число из последовательных чисел.Если это так,то функция выводит первое последовательное порядковое число,а если нет,то возвращает само число.Писала код с помощью срезов. У меня получилось вот что:
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 шт):
Не рискну сказать, что работает верно, так как возможно не очень уловил суть задачи, но для предоставленных данных ожидаемый вывод:
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