用于竞争编程的Python输入法

Python是一种令人惊讶的用户友好语言,唯一的缺点是速度慢。与C、C++和java相比,它的速度要慢得多。在线编码平台,如果提供了C/C++限制 十、 .通常,在Java时间中提供 2X 还有Python,它是 5倍 . 为了提高输入/输出密集型问题的代码执行速度,语言有各种输入和输出过程。

null

一个例子问题: 考虑一个求和的问题 N 用户输入的数字。 输入一个数字 N . 输入 N 数字在一行中用一个空格隔开。

例如:

Input : 51 2 3 4 5Output :15

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

Python的常规方法:(Python 2.7) 1. 原始输入() 接受可选的提示参数。它还会从返回的字符串中去掉尾随的换行符。 2. 打印 它只是一个薄型包装器,用于格式化输入(args和换行符之间的空格),并调用给定对象的write函数。

Python3

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


使用内置stdin的更快的方法,stdout:(Python 2.7) 1. 系统。斯特丁 另一方面是 文件对象 。这就像创建任何其他可以创建的文件对象来读取文件输入一样。在这种情况下,文件将是一个标准的输入缓冲区。 2. 斯特杜特。写(’D’) 打印 . 3.更快的方法是一次一个地写 斯特杜特。写(“.”加入(列表理解)) 但这使得内存使用取决于输入的大小。

Python3

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


时间上的差异:

计时总结(每条100k行) ——————————– 打印:6.040 s 写入文件:0.122秒 使用标准输出打印:0.121秒

正如我们到目前为止所看到的,从标准系统中获取输入并将输出提供给标准系统始终是提高代码效率的一个好主意,这在竞争性编程中一直是一个需要。但是等等!你愿意每次需要的时候都写这些长句吗?那么,使用Python有什么好处呢。 让我们讨论一下这个问题的解决办法。我们可以做的是创建单独的函数来获取各种类型的输入,并在需要时调用它们。

当你想输入一行给定的特定整数时

假设输入的形式如下

5 7 19 20

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

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

因此,我们可以创建一个名为 获取信息 详情如下:

Python3

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


现在你不必一次又一次地写这句话。你只要打电话给 获取信息 函数以获取此表单中的输入。在函数中 获得利益 我们正在使用 地图 作用

当你想输入一行中给定的整数列表时

假设输入的形式如下

1 2 3 4 5 6 7 8

我们希望一个变量能保存完整的整数列表。我们想要的是:

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

在这里,我们将创建一个名为 获取列表() 详情如下:

Python3

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


现在你不必一次又一次地写这句话。你只要打电话给 获取信息 函数以获取此表单中的输入

当你想输入字符串时

假设输入的形式如下

GeeksforGeeks is the best platform to practice Coding.

我们需要一个引用变量来保存这个字符串。我们想要的是:

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

在这里,我们将创建一个名为 获取字符串() 详情如下:

Python3

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


现在你不必一次又一次地写这句话。你只要打电话给 获取字符串() 函数以获取此表单中的输入 添加缓冲管道io:(Python 2.7) 1.简单地说, 添加缓冲IO 在提交代码之前编写代码,以加快输出速度。 2.利益 伊奥。拜特西奥 对象是指它们实现了一个公共接口(通常称为“类似文件”的对象)。 拜特西奥 对象有一个内部指针,每次调用read(n)时,指针都会前进。 3.问题 脱欧 模块提供了一个简单的接口来注册程序正常关闭时要调用的函数。这个 系统 模块还提供了一个钩子sys。exitfunc,但只能在其中注册一个函数。这个 退欧登记 可由多个模块和库同时使用。

Python3

# 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 ( input ())
# input the array
arr = [ int (x) for x in input ().split()]
# initialize variable
summation = 0
# calculate sum
for x in arr:
summation + = x
# print answer
print (summation)


通常在处理大量数据时,常规方法无法在时间限制内执行。方法2有助于维护大量I/O数据。方法3是最快的。通常,方法2和3有助于处理大于2或3 MBs的输入数据文件。 注: 上述代码在Python2.7中,用于Python3。X版本。只需更换 原始输入() 使用Python 3。X的 输入() 语法。休息应该很好。 参考资料: 1. 关于Python 2.7中输入的更多信息 2. 通过sys library和其他命令输出。 3. 通过sys库和其他命令输入。 4. Python atexit模块文档。 本文由 Shubham Saxena .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 写极客。组织 或者把你的文章寄去评论-team@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。 如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享