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

如何按缩进分割splitlines行并生成目标结构化列表?

解决方案:按缩进分组并合并文本

你已经成功定位到了那些作为段落起始的最小缩进行(行3、8、11),接下来只需要利用这些行号来划分段落范围,然后合并每个范围内的文本即可。下面是完整的实现步骤和代码:

步骤说明

  1. 先将原文本按行拆分,得到每行的内容列表;
  2. 结合你找到的关键行号(包括第一行),确定每个段落的行区间;
  3. 遍历每个区间,合并对应行的文本(去除缩进),最终组成目标列表。

完整代码实现

text = '''TextTextTextTextTextTextTextTextText1 TextTextTextTextTextTextTextTextText1
TextTextTextTextTextTextTextTextText1 TextTextTextTextTextTextTextTextText1
TextTextTextTextTextTextTextTextText2 TextTextTextTextTextTextTextTextText2
TextTextTextTextTextTextTextTextText2 TextTextTextTextTextTextTextTextText2
TextTextTextTextTextTextTextTextText2 TextTextTextTextTextTextTextTextText2
TextTextTextTextTextTextTextTextText2 TextTextTextTextTextTextTextTextText2
TextTextTextTextTextTextTextTextText2 TextTextTextTextTextTextTextTextText2
TextTextTextTextTextTextTextTextText3 TextTextTextTextTextTextTextTextText3
TextTextTextTextTextTextTextTextText3 TextTextTextTextTextTextTextTextText3
TextTextTextTextTextTextTextTextText3 TextTextTextTextTextTextTextTextText3
TextTextTextTextTextTextTextTextText4 TextTextTextTextTextTextTextTextText4
TextTextTextTextTextTextTextTextText4 TextTextTextTextTextTextTextTextText4
TextTextTextTextTextTextTextTextText4 TextTextTextTextTextTextTextTextText4'''

# 1. 将文本按行拆分,保留每行内容
lines = text.splitlines()

# 2. 你之前找到的最小缩进行号(注意这里行号是从1开始,列表索引从0开始,要减1)
# 加上第一行,组成所有段落的起始索引
start_indices = [0, 2, 7, 10]  # 对应原行号1、3、8、11

# 3. 确定每个段落的结束索引(下一个起始索引的前一位,最后一段到末尾)
end_indices = [idx - 1 for idx in start_indices[1:]] + [len(lines)-1]

# 4. 遍历每个段落区间,合并文本
result = []
for start, end in zip(start_indices, end_indices):
    # 提取当前段落的所有行,去除缩进后拼接
    paragraph = ' '.join([line.lstrip() for line in lines[start:end+1]])
    result.append(paragraph)

print(result)

代码解释

  • 行拆分:splitlines()把原文本按换行符拆分成每行的列表,方便后续按行处理;
  • 索引转换:因为Python列表索引从0开始,所以把你找到的行号(1、3、8、11)转换成对应的索引0、2、7、10;
  • 区间划分:通过起始索引生成结束索引,比如第一个段落从0到1(对应原行1-2),第二个从2到6(原行3-7),以此类推;
  • 文本合并:对每个区间内的行,先去除左侧缩进(lstrip()),再用空格拼接成完整的段落文本,最终存入结果列表。

运行这段代码后,你会得到期望的4个元素的列表:

[
    'TextTextTextTextTextTextTextTextText1 TextTextTextTextTextTextTextTextText1 TextTextTextTextTextTextTextTextText1 TextTextTextTextTextTextTextTextText1',
    'TextTextTextTextTextTextTextTextText2 TextTextTextTextTextTextTextTextText2 TextTextTextTextTextTextTextTextText2 TextTextTextTextTextTextTextTextText2 TextTextTextTextTextTextTextTextText2 TextTextTextTextTextTextTextTextText2 TextTextTextTextTextTextTextTextText2 TextTextTextTextTextTextTextTextText2',
    'TextTextTextTextTextTextTextTextText3 TextTextTextTextTextTextTextTextText3 TextTextTextTextTextTextTextTextText3 TextTextTextTextTextTextTextTextText3 TextTextTextTextTextTextTextTextText3 TextTextTextTextTextTextTextTextText3',
    'TextTextTextTextTextTextTextTextText4 TextTextTextTextTextTextTextTextText4 TextTextTextTextTextTextTextTextText4 TextTextTextTextTextTextTextTextText4 TextTextTextTextTextTextTextTextText4 TextTextTextTextTextTextTextTextText4'
]

另外,如果你不想手动指定起始索引,也可以基于你之前的indent_dict自动推导:

# 基于indent_dict自动获取最小缩进的行号(转换为索引)
min_indent = min(list_of_values)
start_line_numbers = [k for k, v in indent_dict.items() if v == min_indent]
# 加上第一行
start_line_numbers = [1] + start_line_numbers
# 转换为列表索引
start_indices = [num-1 for num in start_line_numbers]

这样代码会更灵活,即使文本结构变化也能自动适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 12:53:12