Как оптимизировать построчный ввод данных?
Подается число n (n = 173 528). Это кол-во слов, которые затем подаются построчно.
Пробовал использовать:
input = io.BytesIO(os.read(0, os.fstat(0).st_size)).readline
Еще пробовал тестировать с заранее известными данными и моя программа выдавала ответ менее чем за 2 секунды (то есть вся проблема заключается скорее всего в вводе большого кол-ва данных).
Как можно оптимизировать этот ввод? (Данные с ввода сразу записываю в массив)
Ответы (1 шт):
Думаю что язык - Питон. Напечатаем файл из 200000 длинных целых чисел:
for n in range(10 ** 64, 10 ** 64 + 200000):
print(n)
$ python make-list.py > in.txt $ wc in.txt 200000 200000 13200000 in.txt
200000 строк, 13Mb.
Теперь прочитаем этот файл медленно. Каждая строки читается отдельно внутри блока try и преобразуется в целое число:
c = 0
while True:
try:
n = int(input())
except EOFError:
break
c += 1
print(c)
$ time python read-list.py < in.txt 200000 real 0m0.321s user 0m0.280s sys 0m0.036s
За треть секунды всё прочитано, преобразовано и сосчитано. Ищите причины медлительности вашей программы в другом месте.
Ещё одна попытка. Читаем строки из итератора. Преобразование в целые всё ещё есть:
import sys
c = 0
for line in sys.stdin:
n = int(line)
c += 1
print(c)
$ time python read-list.py < in.txt 200000 real 0m0.127s user 0m0.120s sys 0m0.004s
Одна восьмая секунды.
Без преобразований:
import sys
c = 0
for line in sys.stdin:
c += 1
print(c)
$ time py temp.py < in.txt 200000 real 0m0.059s user 0m0.056s sys 0m0.000s
Одна шестнадцатая секунды.