Программа не находит изначальный индекс

Код выполняет следующую задачу:

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

Возникла следующая проблема: программа на месте изначального индекса пишет -1, очевидно ошибка с переменной, но никак не доходит.

Мой код:

import time,os,string,psutil,re
start_time = time.time()
res_list = []
res=''
symbol_len = 1  # Размер буфера чтения
with open('111.txt','r+') as file:
    s = file.read(symbol_len)  # Читаем первый символ
    if not s:  # Обработка исключения пустого файла
        print("\nФайл text.txt пустой.")
    else:
        for line in file.readlines():
            x = re.findall(r'\d+', line)
            if x:
                res_list.extend(x)

    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))

Значения в файле :

12345RE13453434341234567891   
1234567   
123456789101112

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

Автор решения: Edward Grachev

Если я верно тебя понял то вот код:

import fileinput
import time
import os
import psutil
import re

start_time = time.time()
result = []
# Читаем файл
with fileinput.FileInput('111.txt') as file:
    for line in file:
        # Проверяем что строка не пустая
        if len(line.strip()) > 0:
            # Находим в строке самую длинную последовательность
            line_int = max(re.findall(r'\d+', line), key=len)
            # Если переменная не пустая сравниваем длинну строк
            # Добавляем номер строки, строку и длинну строки
            if result:
                if result[2] < len(line_int):
                    result = [file.lineno(), line_int, len(line_int)]
            # Если пустая создаем
            else:
                result = [file.lineno(), line_int, len(line_int)]
# Если нет результата
if not result:
    print('\nФайл text.txt пустой.')
else:
    print(f'Самая длинная восх. посл. - {result[1]}\n'
          f'символов - {result[2]}\n'
          f'начальный индекс - {result[0]}')
    process = psutil.Process(os.getpid())
    print("Программа занимает ", process.memory_info().rss /1048576,"мбайт")  # in bytes
    print("--- %s Секунд выполнялась программа  ---" % (time.time() - start_time))

Ну если я правильно понял то что ты написал. То нужно определять номер последовательности и длину.

import fileinput
import time
import os
import psutil
import re

start_time = time.time()
lst = []
s = ''
l = ''
n = ''
# Читаем файл
with fileinput.FileInput('111.txt') as file:
    for line in file:
            for i in re.findall(r'\d+', line):
                lst.append(i)
# Если нет результата
if not lst:
    print('\nФайл text.txt пустой.')
else:
    # Находим самую длинную последовательность
    for number, i in enumerate(lst):
        buff = 0
        for j in i:
            if int(j) > buff:
                buff = int(j)
                s = i
                l = len(i)
                n = number + 1
            else:
                break

print(f'Список всех последовательностей - {lst}\n'
      f'Самая длинная восх. посл. - {s}\n'
      f'Длинна последовательности - {l}\n'
      f'Номер последовательности - {n}')
process = psutil.Process(os.getpid())
print("Программа занимает ", process.memory_info().rss /1048576,"мбайт")  # in bytes
print("--- %s Секунд выполнялась программа  ---" % (time.time() - start_time))
→ Ссылка
Автор решения: Дмитрий

Edward,

import time,os,string,psutil,re
start_time = time.time()
symbol_len = 1  # Размер буфера чтения
res_list = []

with open('111.txt','r+') as file:
    s = str(file.read())
    s = re.sub('[^\d]', '', s)
if  not s:
    print("файл пуст!")
else:
    print("Введена последовоательность :",s)
    res = ''
    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))
    ```
→ Ссылка