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

Python input()函数字符数限制?大输入Runtime Error求助

解决Python处理超大单行整数输入的Runtime Error问题

我太懂你这种挫败感了——平时用input().split()处理整数输入顺手得很,结果碰到10^6个规模的单行输入时,直接就触发Runtime Error了对吧?问题根源其实出在input()本身:它会把整行内容一次性加载到内存里,当输入规模大到这个程度时,整行字符串的内存占用会直接超出判题系统的限制,自然就报错了。

下面给你几个针对这种超大输入场景的通用解决方案:


1. 用sys.stdin分块读取输入

直接操作标准输入的文件对象,分批次读取内容,彻底避免一次性加载整行的内存压力:

import sys

def read_large_input():
    data = []
    buffer = ''
    # 每次读取4KB的块,可根据判题系统内存情况调整大小
    while chunk := sys.stdin.read(4096):
        buffer += chunk
        # 按空格分割,提取完整的整数片段
        parts = buffer.split(' ')
        # 最后一个元素可能是不完整的整数,留到下一轮处理
        buffer = parts[-1]
        data.extend(parts[:-1])
    # 处理最后剩下的完整整数
    if buffer:
        data.append(buffer)
    # 转换为整数列表返回
    return list(map(int, data))

这个方法的核心是分块读取+缓存不完整内容,完全不会一次性把所有输入塞进内存,完美适配超大输入场景。

2. 按需读取部分输入(满足你留剩余内容在stdin的需求)

如果你确实需要读取部分输入后,把剩下的内容留在stdin里,只需要在分块读取的逻辑里加个计数判断就行。比如只想读取前1000个整数:

import sys

def read_partial_input(limit):
    data = []
    buffer = ''
    count = 0
    while count < limit:
        chunk = sys.stdin.read(4096)
        if not chunk:
            break
        buffer += chunk
        parts = buffer.split(' ')
        buffer = parts[-1]
        # 计算本次能取的整数数量,不超过剩余需要的数量
        take = min(limit - count, len(parts)-1)
        data.extend(parts[:take])
        count += take
    # 转换已读取的部分为整数
    return list(map(int, data))

运行这个函数后,未读取的剩余输入会依然留在stdin中,后续如果有需要还可以继续读取。

3. 避坑提醒

  • 别用sys.stdin.read().split():虽然比input()好一点,但本质还是一次性把所有内容读进内存,10^6个整数的规模下依然可能爆内存。
  • 整数转换可以分批做:如果担心一次性转换10^6个整数占内存,可以在分块读取时就分批转换,进一步降低内存峰值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:47:49