python - 如何遍历列表并创建子列表
问题描述
我正在逐行迭代我制作的列表中的文本文件。文本文件相对较小。如果有两个星号(两行)彼此相邻,我想循环整个列表并创建子列表。
文本文件像这样用星号分隔部分。
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...
解决方案
您有一个错误,当您到达列表末尾时,这将失败: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
推荐阅读
- c - My program doesn't output the first value I entered to search in my array. Why?
- swiftui - 当当前时间超过 SwiftUI 中的阈值时,如何更新视图?
- flutter - VSCode + Flutter => quickfix 将光标留在错误的行
- android - 我是否正确返回了当前位置?
- google-sheets - 在谷歌表格的列中自动填充公式
- csv - (sed) 删除双引号内任意两个数字之间的逗号(但保留数字)
- r - 混淆矩阵 - 错误:`data` 和 `reference` 应该是具有相同级别的因素
- html - CSS全屏背景在移动设备上滚动时在底部显示白条
- javascript - 再一次:SetInterval 不会停止
- r - 合并r中的列值时,如何选择更高(最大值)的值