首页 > 解决方案 > Python:为每个元素及其子元素创建一个子列表

问题描述

我正在做一个从pdf中提取文本的项目。

在提取文本并为每个标题和段落分配标签后,我想将它们的索引添加到新列表中以定位每篇文章。

这是示例列表:

['p', '', '', 'header', 'p', 's', 'p', '', '', 'p', 's', '', '', 'header' , 'p', 'p', 's', '', 'p', 's', '', '标题']

  1. 遍历列表并创建一个列表列表,其中包含每个列表的文章索引
  2. 每篇文章都有一个标题和几个元素,例如 p, s eg
article-index = [[article1], [article2], [article3]]
article-index = [[header, p, s, p, p], [header, p, p], [header, p, p, s]]
  1. 我最初的方法是使用下面的函数来获取每个标题的位置,以找到两个标题之间的范围。然后找出其他标签的位置并忽略空字符串。
def get_position(list_, tag):
    #convert list to an array
    array = np.array(list_)
    #return an array of position of searched item
    index = np.where(array == tag)[0]
    return index
----
get_position(list, 'header')
----
array([3, 13, 31])

输出:

articles_index = [[4,5,6,9,10], [13,14,15, 16, 18, 19], [21]]

感谢您的输入。

标签: pythonlistloopsappend

解决方案


我认为这个解决方案可能会帮助你:

解决方案1:

import copy

a=['p', '', '','header', 'p', 's', 'p', '', '', 'p', 's', '', '','header', 'p', 'p', 's', '', 'p', 's', '', 'header']

b=[]

# Now wanted to create a sub-list after the "header" string. b=[[header, p, s, p, p], [header, p, p], [header, p, p, s]]

for j in range(len(a)):
    try:
        index_remover=a.index('')
        del a[index_remover]
    except:
        pass
a_copy=copy.copy(a)
index=0
indexes=[]
for k in a:
    # all instace finder
    if k=='header':
        indexes.append(index)
    index+=1
for j in range(len(indexes)):
    try:
        b.append(a[indexes[0]:indexes[1]+1])
        del indexes[0]
    except:
        pass

解决方案2:

a=['p', '', '','header', 'p', 's', 'p', '', '', 'p', 's', '', '','header', 'p', 'p', 's', '', 'p', 's', '', 'header']
b=[]

for j in range(len(a)):
    try:
        index_remover=a.index('')
        del a[index_remover]
    except:
        print(Exception)
    
for i in a:
    index_finder=a.index('header')
    b.append(a[0:index_finder-1])
    del a[0:index_finder+1]
    
 print(b) 

推荐阅读