You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python竞赛编程:现有stdin快速读取代码能否再提速5%?

优化Python竞赛编程中的大输入读取性能

针对你的大输入读取性能瓶颈,这里有几个直接的优化方案,能轻松超过你需要的5%性能提升:

核心优化方案:用C实现的字节串操作替代纯Python循环

你的原代码通过Python循环逐个字节拼接整数,这是性能瓶颈的核心——纯Python循环的执行效率远低于C层面的内置操作。可以利用bytes.split()(默认分割所有空白符,匹配你的输入格式)和int()(直接支持字节串转整数)来重构代码:

import sys

def createInputIterator():
    # 一次性读取全部二进制输入
    data = sys.stdin.buffer.read()
    # 按空白符分割字节串,逐个转成整数并yield
    for num_bytes in data.split():
        yield int(num_bytes)

iterator = createInputIterator()

# 使用方式不变
x = next(iterator)

甚至可以简化为更高效的生成器表达式:

import sys

iterator = (int(b) for b in sys.stdin.buffer.read().split())

优化细节说明

  1. 替换手动数值拼接:int(b'1234')是C层面实现的操作,比Python循环中vs *=10; vs += v-48的速度快一个数量级
  2. 简化读取逻辑:sys.stdin.buffer.read()无需提前获取输入大小,自动读取到EOF,避免了fstat的系统调用开销,同时适配管道/非文件类输入场景
  3. 修复原代码的隐藏bug:原代码在输入末尾无分隔符时,会漏掉最后一个整数;split()会自动处理所有非空白片段,无论末尾是否有分隔符

额外性能微调

如果还想进一步压榨性能,可以:

  • 把sys.stdin.buffer.read()的结果赋值给局部变量,减少全局属性访问的开销
  • 避免函数调用开销,直接使用生成器表达式(如上面的简化版本)

这些优化后,输入读取环节的性能会远超原代码,完全能满足2秒时限的要求。

内容的提问来源于stack exchange,提问作者Murilo Perrone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 03:23:36