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

如何通过列表操作生成行号区间列表并合并文本文件对应行?

问题与解决方案

问题描述

我有一个文本文件的行号列表:

linenrs = [8,12,18,21]

希望合并从一个行号到下一个行号之间的所有行内容。自己编写了一段可运行代码,但想通过列表操作实现需求,先得到如下行号区间列表,再据此合并对应行的内容:

newlist = [[8,9,10,11], [12,13,14,15,16,17], [18,19,20], [21,22,23]]

原始代码

newlist, templist = [], []
counter = 0
separator = " "

for i in range(1, 24):  #23 lines in textfileline
     temps = texfileline(i)

         if i in linenrs:
               if counter == 0:
                   templist.append(temps)
                   counter = 1
               elif counter == 1:
                   newlist.append(separator.join(templist))
                   templist = []
                   templist.append(temps)
                   counter = 1

         elif counter == 1 and i <= linenrs[-1]:
              templist.append(temps)

         else:
              newlist.append(temps)

解决方案

1. 生成行号区间列表

可以通过列表推导式结合range、zip直接生成目标区间列表,逻辑更简洁:

linenrs = [8,12,18,21]
# 扩展行号列表,添加文件总行数+1(24),用于处理最后一段区间
extended_linenrs = linenrs + [24]
# 配对相邻行号,生成每个区间的行号列表
line_ranges = [list(range(start, end)) for start, end in zip(extended_linenrs[:-1], extended_linenrs[1:])]

运行后line_ranges就是期望的行号区间列表:[[8,9,10,11], [12,13,14,15,16,17], [18,19,20], [21,22,23]]

2. 基于区间列表合并文本内容

拿到区间列表后,直接遍历每个区间提取内容并合并,同时可补充区间外的行:

separator = " "
merged_content = []
# 先补充1到第一个目标行号之前的行(1-7行)
for i in range(1, linenrs[0]):
    merged_content.append(texfileline(i))

# 遍历每个区间,合并对应行内容
for rng in line_ranges:
    merged_line = separator.join([texfileline(num) for num in rng])
    merged_content.append(merged_line)

这种写法避免了复杂的计数器判断,完全通过列表操作实现需求,代码可读性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 16:01:02