使用缓冲区竞争编程的Python快速输入输出

使用缓冲区竞争编程的Python快速输入输出,python,performance,io,Python,Performance,Io,我见过有人使用不同语言的缓冲区在网上快速输入/输出。例如,这是用C完成的,如下所示: #include <stdio.h> #define size 50000 int main (void){ unsigned int n=0,k,t; char buff[size]; unsigned int divisible=0; int block_read=0; int j; t=0; scanf("%lu %lu\n",&t,&k); while(t){ b

我见过有人使用不同语言的缓冲区在网上快速输入/输出。例如,这是用C完成的,如下所示:

#include <stdio.h>
#define size 50000

int main (void){
unsigned int n=0,k,t;
char buff[size];
unsigned int divisible=0;
int block_read=0;
int j;
t=0;
scanf("%lu %lu\n",&t,&k);

while(t){
    block_read =fread(buff,1,size,stdin);
    for(j=0;j<block_read;j++){
        if(buff[j]=='\n'){
            t--;
            if(n%k==0){
                divisible++;
            }
            n=0;
        }
        else{
            n = n*10 + (buff[j] - '0');
        }
    }
}

printf("%d",divisible);
return 0;
#包括
#定义大小50000
内部主(空){
无符号整数n=0,k,t;
字符buff[大小];
无符号整除=0;
int block_read=0;
int j;
t=0;
scanf(“%lu%lu\n”、&t、&k);
while(t){
块读取=fread(buff,1,大小,标准输入);
对于(j=0;j
不过,这很可能不会提高性能–Python是解释语言,因此您基本上希望在本机代码(本例中为标准库输入/解析例程)上花费尽可能多的时间


TL;DR要么使用内置例程解析整数,要么获得某种第三方库,该库针对速度进行了优化。

我尝试在Python 3中解决这个问题,但无论我如何读取输入,都无法使它工作。然后我切换到在Python 2.5下运行它,以便使用

import psyco
psyco.full()
在做了那个更改之后,我可以通过在for循环中一次读取一行来自
sys.stdin
的输入来让它工作。我使用
raw_input()
读取第一行,解析
n
k
的值,然后使用下面的循环读取其余的输入

for line in sys.stdin:
    count += not int(line) % k

第三方图书馆将不会在在线评委中工作。不过,Thanx对此负责。
for line in sys.stdin:
    count += not int(line) % k