input() 与 sys.stdin 对决
了解为什么普通 input() 会在大型测试中拖慢程序
input() 与 sys.stdin 对决 是 CoddyKit 上的免费 Coding Interview Prep 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Coding Interview Prep 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Coding Interview Prep 课程共包含 4 节课。
input() 的隐性成本
每次调用 input() 都会在后台执行额外工作。读取几行时这完全没问题,但比赛可能会向您提供成千上万行数据。⏱️
为什么开销会累积
变慢的原因是每次调用的开销:提示、刷新和编码检查会在您读取每一行时重复执行。
认识 sys.stdin
更快的路径是从原始输入流 sys.stdin 中读取。它跳过了 input() 为您添加的那些便利功能。
import sys
data = sys.stdin快速读取一行
使用 sys.stdin.readline() 快速获取一行。它的行为类似于 input(),但每次调用的开销要小得多。
import sys
line = sys.stdin.readline()注意换行符
readline() 会保留末尾的换行符。请调用 .strip() 在解析数值前将其移除。
n = int(sys.stdin.readline().strip())一次性读取全部内容
要实现最快的读取,可以使用 sys.stdin.read() 一次性获取全部输入,然后自行处理文本。
data = sys.stdin.read()切分整个数据块
调用 read() 后,使用 .split() 将所有标记转换成一个扁平列表。空白和换行符会被统一处理。
tokens = sys.stdin.read().split()重新绑定 input 以提升速度
一种常见技巧是让 input 指向 readline,这样旧代码无需改动,运行速度却会更快。
import sys
input = sys.stdin.readline什么时候 input() 完全够用
如果题目只读取少量行,直接使用 input() 就完全够用。大规模输入时再使用快速路径。
Print 也有开销
输出也是同样的道理:调用许多次 print() 会很慢。我们将在之后关于批量处理的课程中解决这个问题。
选择合适的工具
经验法则是:输入规模小,使用 input();输入规模大,切换到 sys.stdin。让工具匹配 N,可以帮助您避免丢分。
快速检查
快速直觉检查一下读取速度。
回顾:快速读取
您已经认识了 sys.stdin,它是 input() 的快速替代方案:逐行使用 readline(),或使用 read().split() 读取全部内容。请根据输入规模选择工具。⚡
常见问题解答
「input() 与 sys.stdin 对决」课时是免费的吗?
是的 — 「input() 与 sys.stdin 对决」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Coding Interview Prep 课程的其余内容,请升级到 CoddyKit PRO。 Coding Interview Prep 课程共包含 4 节课。
「input() 与 sys.stdin 对决」这节课中我会学到什么?
了解为什么普通 input() 会在大型测试中拖慢程序 你通过在浏览器中直接运行的动手代码来练习 Coding Interview Prep,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Coding Interview Prep 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Coding Interview Prep 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「input() 与 sys.stdin 对决」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Coding Interview Prep 课中编写并运行代码吗?
能。每节 Coding Interview Prep 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- input() 与 sys.stdin 对决
- 解析同一行中的多个数字
- 正确进行批量输出
- 读取 N 行并处理边界情况