个性化阅读
专注于IT技术分析

Python输入方法的竞争编程

本文概述

Python是一种非常友好的语言,唯一的缺点是速度慢。与C、c++和Java相比,它相当慢。在线编码平台,如果C/ c++提供的限制是x。通常,Java提供的时间是2X, Python提供的时间是5X。

为了提高输入/输出密集型问题的代码执行速度,语言有各种输入和输出过程。

一个示例问题:

考虑一个求用户输入的N个数和的问题。

输入数字N

输入N个数字,在一行中用一个空格分隔。

例子:

Input : 
5
1 2 3 4 5
Output :
15

针对上述问题的不同Python解决方案:

普通方法Python:(Python 2.7)

1.raw_input()采用可选的提示参数。它还将从返回的字符串中删除结尾的换行符。

2.print只是一个薄包装器, 用于格式化输入(末尾args和换行符之间的空间)并调用给定对象的write函数。

python

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

使用内置的stdin, stdout的方法快一点:(Python 2.7)

1. sys.stdin则是一个文件对象。这就像创建任何其他可以创建的文件对象来从文件中读取输入一样。在这种情况下,文件将是标准输入缓冲区。

2. stdout.write(‘ D\n ‘)比print ‘ D ‘快。

3.通过stdout.write(” ” .join(list-comprehension))一次写入会更快,但这会使内存使用依赖于输入的大小。

python

# import inbuilt standard input output
from sys import stdin, stdout
 
# suppose a function called main() and
# all the operations are performed
def main():
 
     # input via readline method
     n = stdin.readline()
 
     # array input similar method
     arr = [ int (x) for x in stdin.readline().split()]
 
     #initialize variable
     summation = 0
     
     # calculate sum
     for x in arr:
         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()

时间差:

时序摘要(每行10万行)——————————–打印:6.040 s写入文件:0.122 s使用标准输出打印:0.121 s

到目前为止, 我们已经看到从标准系统获取输入并将输出提供给标准系统始终是提高代码效率的好主意, 这在竞争编程中始终是必需的。可是等等!你是否想在需要时每次都写这些长行?然后, 使用Python有什么好处。

让我们讨论这个问题的解决方案。我们可以做的是创建单独的函数来获取各种类型的输入, 并在需要时随时调用它们。

当你要输入单行中给定的特定整数的整数的输入时

假设输入具有以下形式

5 7 19 20

并且我们想要单独的变量来引用它们。我们想要的是:

a = 5
b = 7
c = 19
d = 20

因此, 我们可以创建一个名为get_ints()

如下:

Python3

import sys
def get_ints(): return map ( int , sys.stdin.readline().strip().split())
 
a, b, c, d = get_ints()

现在, 你不必一次又一次地写此行。你只需要致电get_ints()功能以采用这种形式输入。在功能上get_ints我们正在使用地图 功能。

当你要输入一行中给出的整数列表时

假设输入具有以下形式

1 2 3 4 5 6 7 8

并且我们希望单个变量将包含整个整数列表。我们想要的是:

Arr = [1, 2, 3, 4, 5, 6, 7, 8]

因此, 在这里我们将创建一个名为get_list()

如下:

Python3

import sys
def get_ints(): return list ( map ( int , sys.stdin.readline().strip().split()))
 
Arr = get_ints()

现在, 你不必一次又一次地写此行。你只需要调用get_ints()函数以接受这种形式的输入

当你想输入字符串时

假设输入具有以下形式

srcmini is the best platform to practice Coding.

并且我们希望单个引用变量将包含此字符串。我们想要的是:

string = "srcmini if the best platform to practice coding."

因此, 在这里我们将创建一个名为get_string()

如下:

Python3

import sys
def get_string(): return sys.stdin.readline().strip()
 
string = get_string()

你们不用一遍又一遍地写这一行。您只需要调用get_string()函数来接受这种形式的输入

添加缓冲管道io:(Python 2.7)

1. 简单地说,就是在提交代码之前添加缓冲IO代码,以使输出更快。

2. io的好处。BytesIO对象实现了一个公共接口(通常称为“类文件”对象)。BytesIO对象有一个内部指针,每次调用read(n)指针都会前进。

3.atexit模块提供了一个简单的接口,用于注册在程序正常关闭时调用的函数。sys模块还提供了一个钩子sys。Exitfunc,但是只有一个函数可以在那里注册。atexit注册表可以被多个模块和库同时使用。

python

# template begins
#####################################
 
# import libraries for input/output handling
# on generic level
import atexit, 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
def write():
     sys.__stdout__.write( buffer .getvalue())
 
#####################################
# template ends
 
# normal method followed
# input N
n = int ( raw_input ())
 
# input the array
arr = [ int (x) for x in raw_input ().split()]
 
# initialize variable
summation = 0
 
# calculate sum
for x in arr:
     summation + = x
 
# print answer
print (summation)
赞(0)
未经允许不得转载:srcmini » Python输入方法的竞争编程

评论 抢沙发

评论前必须登录!