Python Программа работает с цифрами,а нужно с числаами

Задание

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

import time,os,string,psutil
 
start_time = time.time()
symbol_len = 1  # Размер буфера чтения
with open('111.txt','r+') as file: 
    s = str(file.read())
if  os.stat("111.txt").st_size == 0 or not s.isdigit():
    print("Файл пуст или содержит не только числа  !!!")
else:
    print("Введена последовоательность :",s)
    res = ''
    res_list = []
    i = 0
 
    while i < len(s):
        if res == '' or (int(res[-1]) < int(s[i])):
            res += s[i]
        else:
            res_list.append(res)
            res = s[i]
        i += 1
 
    res_list.append(res)
    _max = max(res_list, key=len)
    print(f'Самая длинная восх. посл. - {_max}\nсимволов - {len(_max)}\nначальный индекс - {s.find(_max)}')
    process = psutil.Process(os.getpid())
    print("Программа занимает ", process.memory_info().rss /1048576,"мбайт")  # in bytes
    print("--- %s Секунд выполнялась программа  ---" % (time.time() - start_time))

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

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

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

res = ''
i = 0

max_seq_size = -1
max_seq_pos = -1

while i < len(s):
    if res == '' or (int(res[-1]) < int(s[i])):
        res += s[i]
    else:
        if len(res) > max_seq_size:
            max_seq_size = len(res)
            max_seq_pos = i - max_seq_size

        res = s[i]
    i += 1

if len(res) > max_seq_size:
    max_seq_size = len(res)
    max_seq_pos = i - max_seq_size

Да и while лучше на for заменить, более читаемо будет:

res = ''

max_seq_size = -1
max_seq_pos = -1

for i in range(len(s)):
    if res == '' or (int(res[-1]) < int(s[i])):
        res += s[i]
    else:
        if len(res) > max_seq_size:
            max_seq_size = len(res)
            max_seq_pos = i - max_seq_size

        res = s[i]

if len(res) > max_seq_size:
    max_seq_size = len(res)
    max_seq_pos = len(s) - max_seq_size

да и накапливать последовательность смысла нет:

seq_size = 0
digit = 0

max_seq_size = -1
max_seq_pos = -1

for i in range(len(s)):
    if seq_size == 0 or (digit < int(s[i])):
        seq_size += 1 
    else:
        if seq_size > max_seq_size:
            max_seq_size = seq_size
            max_seq_pos = i - max_seq_size

        seq_size = 1

    digit = int(s[i])

if seq_size > max_seq_size:
    max_seq_size = seq_size
    max_seq_pos = len(s) - max_seq_size
→ Ссылка