ACM模式的输入部分——input().strip() 与 sys.stdin.readline() 的不同
我的疑问:
input().strip() 与 sys.stdin.readline() 的不同
1. input().strip()
input()
本质上就是从sys.stdin.readline()
读一行,然后自动去掉结尾的 换行符。所以严格来说:
input() == sys.stdin.readline().rstrip("\n")
如果你再
.strip()
,就会把开头和结尾的所有空白符(空格、\t
、\n
)都去掉。
2. sys.stdin.readline()
原始读取一行,包含末尾的
\n
。它比
input()
快,常用于大数据量输入(例如10^5
或更多行)。但要注意手动
.strip()
或.rstrip("\n")
来去掉换行。
3. 性能区别
速度:
sys.stdin.readline()
>input()
,因为input()
里还带了额外封装。常用场景:
数据量小:用
input()
,简单好记。数据量大(ACM / LeetCode 超大输入):推荐
sys.stdin.readline()
。
举例
# 读一行 "123\n"
s1 = input() # s1 == "123"
s2 = sys.stdin.readline() # s2 == "123\n"# 所以通常写法:
s2 = sys.stdin.readline().strip()
所以总结:
input().strip()
≈sys.stdin.readline().strip()
(在大多数题里等价)但
sys.stdin.readline()
本身更快,适合大数据输入。
要不要我给你整理一个 ACM 常用输入方式对比表(单行、多行、EOF、T组、矩阵输入)?