Python按位置提取文本指定元素 for循环执行异常问题排查
问题原因分析
你的嵌套循环逻辑存在两层错位问题:
- 你默认
listoftexts里的第N个文本,对应zl里的第N个子列表(存储对应文本的元素类型和起止位置),但你现在的循环是每处理一个文本就全量遍历一次zl的所有子列表,每次遍历都会重置document变量,最终document里保留的永远是用zl最后一个子列表的位置规则切出来的内容,和当前文本完全不匹配。 zl的第二个子列表里根本不存在Item2类型的元素,如果某个文本对应的子列表没有Item2,你的逻辑会意外使用后续子列表的位置规则,自然会提取出随机内容。
修正方案
你需要让文本和对应的位置列表一一对应遍历,可以用zip同时遍历listoftexts和zl,修正后的代码如下:
final = [] # 同时遍历文本和对应的位置规则列表,一一对应 for text, position_list in zip(listoftexts, zl): document = {} for doc_type, doc_start, doc_end in position_list: if doc_type == 'Item2': document[doc_type] = text[doc_start:doc_end] final.append(document)
如果需要兼容部分文本不存在Item2的情况,可以加默认值和提前退出逻辑,优化执行效率:
final = [] for text, position_list in zip(listoftexts, zl): document = {} for doc_type, doc_start, doc_end in position_list: if doc_type == 'Item2': document[doc_type] = text[doc_start:doc_end] break # 找到Item2就提前结束当前循环,节省资源 # 可选配置:没有找到Item2时设置默认空值,避免后续取值报错 if 'Item2' not in document: document['Item2'] = '' final.append(document)
内容的提问来源于stack exchange,提问作者haven
相关产品推荐
相关产品推荐

