我试图在关键词之间提取列表的特定部分,即介于和之间的所有内容,忽略其他所有内容。你知道吗
['badsffsg\n', 'fssdfsdgdg\n''<begin data>\n', 'data\n', '<end data>\n', 'bagsdg\n', 'fsdgdg\n', '<begin data>\n', 'data\n', 'data\n', '<end data>\n' 'gsdg\n']
我搞不清楚如何遍历这个列表。我解决了一个类似的问题,但它是针对字典中固定索引处只有一个数据块的情况。你知道吗
def extract_person(lines, start_index=0):
start = start_index
end = lines.index('<end data>\n', start_index + 1)
mylist = []
for line in range(start + 1, end):
这一次是一个列表,有多个数据块,它不确定数据从哪里开始。我需要的是一些建议。你知道吗
使用列表的索引方法对您有利。你知道吗
这个输出
如果缺少标记,可以添加条件测试
当然,有几种不同的方法来编写解决方案。让我们忘记使用索引(因为当找不到标记时需要捕获异常;我假设您需要一个没有索引的简单算法)。如果您仔细阅读这两个描述,下面的代码实际上是Michael建议的变体:
说明:
我们将在变量
blocks
中收集有效的数据块。你知道吗我们使用
pos
(position)从开始到end
(而不是更多)遍历列表以保持当前索引位置。找到'start'
意味着创建一个空的新block
来存储下一个项目,直到找到一个'end'
标记。你知道吗我们附加块数据,但要注意列表不会过早结束,直到找到
'end'
标记。条件顺序很重要,因为否则我们可能会尝试使用无效(太大)索引访问data
。如果左侧的第一个条件已经为False,则and
运算符右侧的条件不会被计算,因此在这种情况下不会出现错误。你知道吗我们继续,直到名单结束。你知道吗
如果有一个
'start'
标记没有和'end'
标记,则在结果blocks
列表中会留下最后一个空块。你知道吗如果当前在数据块中,请使用变量作为标志。最初将标志设置为
False
。你知道吗遍历列表,遇到block start时,将flag设置为
True
。 如果标志是True
,列表项既不是开始标记也不是结束标记,则处理作为当前数据块一部分的列表项。遇到block end时,将flag设置为False
,并可能对关闭的数据块进行一些最终处理。你知道吗相关问题 更多 >
编程相关推荐