python的input()函数截断超长输入

-1 投票
2 回答
63 浏览
提问于 2025-04-14 15:20

我正在写一个编程挑战的解决方案,但我发现对于特别长的输入,答案总是错的。问题似乎不在我的算法,而是因为Python的输入函数在达到一定长度后会截断字符(大约是2的14次方,也就是接近16,384个字符)。我从文件中复制并粘贴了超过26,000个字符的输入到控制台,粘贴时整个输入都能看到,但打印出来时只读取了前面的16,381个字符。

这个挑战提供了两个输入,每个输入都超过26,000个字符。输入函数只能获取大约16,000个字符,然后就截断了。再调用一次input()并不能获取剩下的字符,而是获取下一个输入。

在比赛中,我无法控制数据的提供方式——数据是作为控制台输入提供的,所以文件读取的方法不适用,除非有办法让文件读取从控制台流中读取。

我该如何在不安装任何额外Python库的情况下获取非常长的输入?有没有什么方法可以像Java的Scanner的next()函数那样逐个读取输入的单词?我不需要保存整个输入,只需要逐个字符处理整个输入并进行一些计算,但如果只能提取60%的输入,我就无法做到。

line = input()
print(len(line))

提供上述代码并输入一个单个的26,000+字符(从某处复制粘贴过来),打印的结果是16,381个字符长。

2 个回答

0

为了说明清楚,这个输入有26,000个字符,实际上是一个没有换行的单一输入(这来源于一个比赛的挑战题,题目里的数据量非常大)。

不过,我发现问题其实和我使用的开发环境有关。我当时用的是一个可执行的(没有安装的)VSCode版本。在VSCode中运行程序时,input()函数的输入被截断了,大约在16,000个字符的时候就停止了。而在Idle中运行同样的程序时,就没有这种截断现象,我能够得到程序其余部分的正确答案。

1

你的数据几乎肯定包含一个或多个换行符。

input() 函数会读取数据,直到遇到第一个换行符为止,但不会包括这个换行符。

你可以通过以下方式从标准输入流中读取数据:

import sys

data = sys.stdin.read()
print(len(data))

以这种方式读取输入数据时,不会受到换行符的影响,也就是说,它会一直读取到文件结束(EOF)。

注意:

这种方法不太适合需要互动输入的场景。

撰写回答