首页 > 解决方案 > 如何遍历列表并创建子列表

问题描述

我正在逐行迭代我制作的列表中的文本文件。文本文件相对较小。如果有两个星号(两行)彼此相邻,我想循环整个列表并创建子列表。

文本文件像这样用星号分隔部分。

Header
*
Section 1 Header:
Content
Content
Content
*
*
Header
*
Section 2 Header:
Content
Content
Content
* 
*
TextFile_List = [line.strip() for line in open('TextFile.txt')]
for line in TextFile_List: line

output = []
for i in range(len(TextFile_List)):  #Iterates through all the lines in the list
    if TextFile_List[i]+TextFile_List[i+1]=="**":  #If * new line * are consecutive #Create sublist?/ Do something
        pass

当我运行我的代码时,我在这一行得到一个错误

if TextFile_List[i]+TextFile_List[i+1]=="**":

我的列表索引超出范围,我认为是在 i+1 部分。

理想情况下,我希望每个部分都有自己的列表。所以第 1 节的标题、内容、内容、内容将是它自己的列表。

像这样,

List1 = ["Section 1 Header", "Content", "Content", "Content"]
List2 = ["Section 2 Header", "Content", "Content", "Content"]
etc...

标签: python

解决方案


您有一个错误,当您到达列表末尾时,这将失败:TextFile_List[i+1]. 试试这个:

for i in range(len(TextFile_List) - 1):

现在,对于第二部分:如果您对迭代索引有更多控制权,这将更简单,这是一个可能的解决方案:

i = 0
output = []
sublist = []

while i < len(TextFile_List) - 1:
    line = TextFile_List[i]
    next_line = TextFile_List[i+1]
    if line == 'Header':
        i += 2
    elif line == '*' and next_line == '*':
        output.append(sublist)
        sublist = []
        i += 2
    else:
        sublist.append(line)
        i += 1

推荐阅读