Методы ввода Python для конкурентного программирования

Python - удивительно удобный язык с единственным недостатком - медленный. По сравнению с C, C ++ и Java он работает намного медленнее. На платформах онлайн-кодирования, если ограничение C / C ++ установлено на X. Обычно в Java время составляет 2X, а Python - 5X .

Чтобы повысить скорость выполнения кода для интенсивных задач ввода / вывода, языки имеют различные процедуры ввода и вывода.

Пример задачи:
Рассмотрим вопрос о поиске суммы N чисел, введенных пользователем.
Введите число N.
Введите N чисел, разделенных одним пробелом в строке.
Примеры:

Вход: 
5
1 2 3 4 5
Выход :
15

Различные решения Python для вышеуказанной проблемы:
Нормальный метод Python: (Python 2.7)
1. raw_input () принимает необязательный аргумент подсказки. Он также удаляет завершающий символ новой строки из возвращаемой строки.
2. print - это просто тонкая оболочка, которая форматирует входные данные (пробел между аргументами и символом новой строки в конце) и вызывает функцию записи для данного объекта.

filter_none

редактировать
близко

play_arrow

ссылка на сайт
brightness_4
код

# basic method of input output
# input N
n =int(raw_input())
 
# input the array
arr =[int(x) forx inraw_input().split()]
 
# initialize variable
summation =0
 
# calculate sum
forx inarr:
    summation +=x
     
# print answer
print(summation)

chevron_right

Немного более быстрый метод с использованием встроенного stdin, stdout: (Python 2.7)
1. sys.stdin, с другой стороны, является Файловым Объектом . Это похоже на создание любого другого файлового объекта, который можно создать для чтения входных данных из файла. В этом случае файл будет стандартным входным буфером.
2. stdout.write ('D / n') быстрее, чем печатать 'D' .
3. Еще быстрее написать все один раз с помощью stdout.write («». Join (list-compceptionsion)), но это делает использование памяти зависимым от размера ввода.

filter_none

редактировать
близко

play_arrow

ссылка на сайт
brightness_4
код

# import inbuilt standard input output 
fromsys importstdin, stdout 
 
# suppose a function called main() and
# all the operations are performed
defmain():
 
    # input via readline method
    n =stdin.readline()
 
    # array input similar method
    arr =[int(x) forx instdin.readline().split()]
 
    #initialize variable
    summation =0
     
    # calculate sum
    forx inarr:
        summation +=x
 
    # could use inbuilt summation = sum(arr)
 
    # print answer via write
    # write method writes only
    # string operations
    # so we need to convert any
    # data into string for input
    stdout.write(str(summation))
 
# call the main method
if__name__ =="__main__":
    main()    

chevron_right

Разница во времени:

Сводка по времени (100 тыс. Строк каждая)
-----------
Печать: 6,040 с
Запись в файл: 0,122 с
Печать с Stdout: 0,121 с

Добавление буферизованного канала io: (Python 2.7)
1. Просто добавьте буферизованный код ввода-вывода перед кодом отправки, чтобы ускорить вывод.
2. Преимущество объектов io.BytesIO состоит в том, что они реализуют общий интерфейс (обычно называемый «файловым» объектом). Объекты BytesIO имеют внутренний указатель, и для каждого вызова read (n) указатель продвигается.
3. Модуль atexit предоставляет простой интерфейс для регистрации функций, вызываемых при нормальном закрытии программы. Модуль sys также предоставляет хук sys.exitfunc, но там может быть зарегистрирована только одна функция. Реестр atexit может использоваться несколькими модулями и библиотеками одновременно.

filter_none

редактировать
близко

play_arrow

ссылка на сайт
brightness_4
код

# template begins
#####################################
 
# import libraries for input/ output handling
# on generic level
importatexit, io, sys
 
# A stream implementation using an in-memory bytes 
# buffer. It inherits BufferedIOBase.
buffer=io.BytesIO()
sys.stdout =buffer
 
# print via here
@atexit.register
defwrite():
    sys.__stdout__.write(buffer.getvalue())
 
#####################################
# template ends
 
# normal method followed
# input N
n =int(raw_input())
 
# input the array
arr =[int(x) forx inraw_input().split()]
 
# initialize variable
summation =0
 
# calculate sum
forx inarr:
    summation +=x
 
# print answer
print(summation)

chevron_right

Обычно при обработке большого количества данных обычный метод не может быть выполнен в установленные сроки. Метод 2 помогает поддерживать большое количество данных ввода / вывода. Метод 3 самый быстрый. Обычно обработка входных файлов данных размером более 2 или 3 МБ осуществляется с помощью методов 2 и 3.

Примечание: вышеупомянутые коды в Python 2.7, для использования в версиях Python 3.X. Просто замените raw_input () на синтаксис Python 3.X input () . Отдых должен работать нормально.

Рекомендации:
1. Подробнее о вводе в Python 2.7
2. Вывод через библиотеку sys и другие команды.
3. Ввод через библиотеку sys и другие команды.
4. Python atexit Модуль документов.

Эта статья предоставлена Shubham Saxena . Если вы хотите GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.


adsense2code6
Мои личные заметки arrow_drop_up

Рекомендуемые сообщения:


Улучшено: HARSHGUPTA5

adsense2code6