You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何拆分标准输入数据?Python读取stdin数据的代码问题解决

问题与解决方案

场景说明

你已经通过以下代码读取了标准输入的所有行数据:

import sys
data = sys.stdin.readlines()
l = len(data)

输入格式规则为:首行包含两个数字n和m,后续m行每行包含四个数值x1、y1、x2、y2,示例输入如下:

1 0
2 2
0 0 1 1
0 1 1 0

你尝试的代码无法正常运行:

for _ in range(l):
    n, m = map(int, data.readline().split())

    some_list = []
    for _ in range(m):
        x1, y1, x2, y2 = map(int, data.readline().split())
        some_list.append([x1, y1, x2, y2])
    some_function_with_given_part_of_data()

问题原因

data是readlines()返回的字符串列表,它没有readline()方法——readline()是文件对象的专属方法。你需要直接操作这个列表的元素,而不是调用不存在的方法。

正确实现方式

方式一:索引指针遍历(直观可控)

import sys

data = sys.stdin.readlines()
ptr = 0  # 用指针追踪当前处理到的行索引

while ptr < len(data):
    # 读取首行的n和m,先strip去掉换行和空格
    n, m = map(int, data[ptr].strip().split())
    ptr += 1
    
    some_list = []
    # 读取后续m行坐标
    for _ in range(m):
        if ptr >= len(data):
            break  # 防止输入数据行数不足导致索引越界
        coords = list(map(int, data[ptr].strip().split()))
        x1, y1, x2, y2 = coords
        some_list.append([x1, y1, x2, y2])
        ptr += 1
    
    # 传入数据调用处理函数
    some_function_with_given_part_of_data(n, some_list)

方式二:迭代器方式(简洁高效)

把列表转成迭代器,用next()逐个取行,不用手动维护索引:

import sys

lines_iter = iter(sys.stdin.readlines())

while True:
    try:
        # 获取首行,跳过空行
        line = next(lines_iter).strip()
        while not line:
            line = next(lines_iter).strip()
        n, m = map(int, line.split())
    except StopIteration:
        break  # 没有更多数据,退出循环
    
    some_list = []
    for _ in range(m):
        try:
            coords = list(map(int, next(lines_iter).strip().split()))
            some_list.append(coords)
        except StopIteration:
            break  # 数据不足时停止读取
    
    some_function_with_given_part_of_data(n, some_list)

注意事项

  • 处理每行时用strip()去除换行符和首尾空格,避免拆分出空字符串导致转换错误
  • 加入边界判断(比如ptr >= len(data)或StopIteration捕获),能避免输入格式不规范时程序崩溃
  • 如果能确保输入数据完全符合规则,可以简化边界判断,但保留会让代码更健壮

内容的提问来源于stack exchange,提问作者niico

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 11:10:34