如何在Python 3中单行接收多个输入?含未知每行输入数量场景
嘿,我来帮你搞定这个问题!在Python 3里处理单行多输入和动态行数的输入其实挺简单的,我分两种场景给你讲清楚:
基础场景:单行接收多个输入
最常用的方法就是借助input()获取整行输入,再用split()方法把输入按空格分割成字符串列表——不管输入里有多少个空格,它都能自动处理。如果需要把这些输入转成整数(或者其他数据类型),用map()函数就行。
举个例子,如果你输入一行5 8 2 9,可以这么写:
# 获取单行输入并转成整数列表 nums = list(map(int, input().split())) print(nums) # 输出: [5, 8, 2, 9]
要是你需要把输入分别赋值给变量(比如两个数),直接拆包就行:
a, b = map(int, input().split()) print(a, b) # 输入"3 7"的话,输出3 7
不过要注意,如果输入的数量和变量数量不匹配会报错,所以不确定输入数量的时候,用列表存储更稳妥。
特定场景:首行指定行数,每行输入数量不确定
你提到的示例输入3 1 2 3 4 3 8 9 6 3,我猜是两种情况:一种是先输入行数,再逐行输入任意数量的内容;另一种是所有内容挤在一行里。我分别给你讲处理方法:
情况1:交互式逐行输入
如果是先输入行数,再依次输入每行的内容(每行数量随便),可以这么写:
# 先获取要输入的行数 n = int(input()) # 用列表存储所有行的数据 all_data = [] for _ in range(n): # 每行接收任意数量的输入,转成整数列表 line_nums = list(map(int, input().split())) all_data.append(line_nums) # 打印结果看看 print("所有行的数据:") for line in all_data: print(line)
测试的时候你可以这么输入:
3 1 2 3 4 3 8 9 6 3
输出就是:
所有行的数据: [1, 2, 3] [4, 3] [8, 9, 6, 3]
情况2:所有输入在同一行
如果所有内容都挤在一行里(比如你给的示例3 1 2 3 4 3 8 9 6 3),这里要注意:第一个数字是行数,但剩下的数字怎么划分成对应行数的内容其实是有歧义的——除非你有明确的划分规则(比如每行的第一个数字是该行的元素个数)。假设你是想把第一个数字作为行数,剩下的数字按顺序分成n行(每行至少一个元素),可以这么处理(这里假设每行至少一个元素,按平均分配,多的放在最后一行):
# 读取整行并转成整数列表 all_nums = list(map(int, input().split())) # 第一个元素是行数 n = all_nums[0] # 剩下的是要分配的数据 data = all_nums[1:] # 计算每行至少有多少个元素 avg = len(data) // n # 剩下的元素个数 remainder = len(data) % n all_data = [] start = 0 for i in range(n): # 前remainder行多一个元素 end = start + avg + (1 if i < remainder else 0) all_data.append(data[start:end]) start = end print(all_data)
输入3 1 2 3 4 3 8 9 6 3的话,输出就是:
[[1, 2, 3], [4, 3, 8], [9, 6, 3]]
不过如果你的实际需求是把后续的内容作为单独的行(比如原本是多行输入被合并成了一行),那可能需要你补充划分规则,不然程序没法自动判断每行的边界哦。
另外,如果你的输入是来自文件或者是多行粘贴的内容,用sys.stdin读取会更稳妥,避免input()只能读取一行的问题:
import sys # 读取所有非空白的输入行 lines = [line.strip() for line in sys.stdin if line.strip()] # 第一行是行数 n = int(lines[0]) # 提取后面n行的数据 all_data = [] for line in lines[1:n+1]: all_data.append(list(map(int, line.split()))) print(all_data)
这样不管是手动输入多行还是粘贴内容,都能正确处理啦。
内容的提问来源于stack exchange,提问作者Mahir Islam

