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

Python实现按规则分组读取stdin行并生成两字符串的最优方案

处理stdin行分组的最优实现方案

嘿,这个需求很明确,我给你分享几个高效且易维护的实现思路,比手动每次解析8行要灵活得多:

方法1:基于行号的周期判断(内存友好,推荐大输入场景)

核心思路是利用行号的数学规律:每8行为一个周期,前4行归组A,后4行归组B。我们可以逐行读取输入,边读边分组,不用一次性加载所有内容到内存,适合处理超大输入。

import sys

# 初始化两个分组列表
group_a = []
group_b = []

# 用enumerate从1开始计数行号
for line_num, line in enumerate(sys.stdin, start=1):
    # 移除末尾换行符(根据需求可调整,比如保留的话就去掉这行)
    cleaned_line = line.rstrip('\n')
    # 计算当前行在8行周期内的位置(0-7)
    cycle_position = (line_num - 1) % 8
    if cycle_position < 4:
        group_a.append(cleaned_line)
    else:
        group_b.append(cleaned_line)

# 转换为最终需要的字符串(用换行符连接)
result_str_a = '\n'.join(group_a)
result_str_b = '\n'.join(group_b)

方法2:按8行块批量处理(直观易读,适合小输入场景)

如果输入内容不大,一次性读取所有行后按块切分处理会更直观,也容易处理最后一块不足8行的边界情况:

import sys

# 一次性读取所有行并清理换行符
all_lines = [line.rstrip('\n') for line in sys.stdin.readlines()]

group_a = []
group_b = []

# 每8行作为一个块循环处理
for i in range(0, len(all_lines), 8):
    current_block = all_lines[i:i+8]
    # 前4行加入组A,剩余的加入组B(自动处理不足8行的情况)
    group_a.extend(current_block[:4])
    group_b.extend(current_block[4:])

result_str_a = '\n'.join(group_a)
result_str_b = '\n'.join(group_b)

小提示

  • 如果你的输入是超大文件/数据流,优先选方法1,因为它不会把所有内容加载到内存,内存占用更低;
  • 如果输入内容较小,方法2的代码可读性更高,调试起来也更方便;
  • 两种方法都自动处理了输入行数不是8的倍数的情况,比如最后只剩3行,这3行会全部归入组A;如果最后剩5行,前4行入A,最后1行入B。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 12:32:37