Python 3中如何更优地处理控制台多行输入?
处理Python 3中的多行输入(整段复制粘贴场景)
当需要处理如下格式的多行输入时:
10
1
6
8
5
4
7
3
2
9
0
你最初使用的逐行读取代码:
numbers=[] n = int(input()) # Get n numbers for i in range(n): # Add n numbers in list numbers.append(int(input()))
仅支持逐行手动回车输入,整段复制粘贴时会抛出ValueError——因为input()仅读取第一行,后续内容会被当作无效输入干扰解析。
你自己实现的解决方案:
sample_input=input().splitlines() n = int(sample_input[0]) # Get n numbers data=[] for i in range(1, n+1): # Add n numbers in list data.append(int(sample_input[i]))
以下是几种更简洁的优化实现:
方案1:用列表推导式+sys.stdin(最可靠)
sys.stdin能完整捕获所有输入内容,同时过滤空行避免干扰:
import sys # 读取所有非空行 lines = [line.strip() for line in sys.stdin if line.strip()] n = int(lines[0]) data = [int(line) for line in lines[1:n+1]]
方案2:结合read()和map(极简写法)
如果输入没有多余空行或空格,可直接按空白符分割处理:
import sys lines = sys.stdin.read().split() n = int(lines[0]) data = list(map(int, lines[1:n+1]))
sys.stdin.read()一次性读取所有输入,split()自动处理所有空白分隔符(换行、空格等),再通过map批量转成整数。
方案3:无依赖简化版(兼容部分环境)
在支持input()读取多行的终端/平台(按下Ctrl+D结束输入),可直接简化原方案:
lines = input().splitlines() n = int(lines[0]) data = [int(line) for line in lines[1:n+1]]
内容的提问来源于stack exchange,提问作者uaevuon
相关产品推荐
相关产品推荐

