使用索引拆分列表

时间:2012-06-27 03:19:24

标签: python list

我正努力在某些指数中将列表分割成碎片。虽然我一次只能做一件,但我没有达到一种表达方式,这样我就可以跳过它。

import re

#   Creating list to split

list = ['Leading', 'text', 'of', 'no', 'interest', '1.', 'Here', 'begins', 'section', '1', '2.', 'This', 'is', 'section', '2', '3.', 'Now', 'we', `enter code here`'have', 'section', '3']


#   Identifying where sections begin and end

section_ids = [i for i, item in enumerate(list) if re.search('[0-9]+\.(?![0-9])', item)]


#   Simple creation of a new list for each section, piece by piece

section1 = list[section_ids[0]:section_ids[1]]
section2 = list[section_ids[1]:section_ids[2]]
section3 = list[section_ids[2]:]


#   Iterative creation of a new list for each claim - DOES NOT WORK

for i in range(len(section_ids)):
     if i < max(range(len(section_ids))):
          section[i] = list[section_ids[i] : list[section_ids[i + 1]]
     else:
          section[i] = list[section_ids[i] : ]
     print section[i]

#   This is what I'd like to get

#   ['1.', 'Here', 'begins', 'section', '1']
#   ['2.', 'This', 'is', 'section', '2']
#   ['3.', 'Now', 'we', 'have', 'section', '3']

3 个答案:

答案 0 :(得分:0)

for i,j in map(None, section_ids, section_ids[1:]):
    print my_list[i:j]
如果section_ids很大,那么

itertools版本将更有效

from itertools import izip_longest, islice
for i,j in izip_longest(section_ids, islice(section_ids, 1, None)):
    print my_list[i:j]

答案 1 :(得分:0)

我能够使用以下代码生成所需的输出:

section=[]
for i,v in enumerate(section_ids+[len(list)]):
    if i==0:continue
    section.append(list[section_ids[i-1]:v])

答案 2 :(得分:0)

你想要实现这样的目标:

>>> section = [] # list to hold sublists ....
>>> for index, location in enumerate(section_ids):
...     if location != section_ids[-1]: # assume its not the last one
...         section.append(list[location:section_ids[index + 1]])
...     else:
...         section.append(list[location:])
...     print section[-1]
...
['1.', 'Here', 'begins', 'section', '1']
['2.', 'This', 'is', 'section', '2']
['3.', 'Now', 'we', 'have', 'section', '3']
>>> 

或:

>>> import re
>>> from pprint import pprint
>>> values = ['Leading', 'text', 'of', 'no', 'interest', '1.', 'Here', 'begins', 'section', '1', '2.', 'This', 'is', 'section', '2', '3.', 'Now', 'we', 'have', 'section', '3']
>>> section_ids = [i for i, item in enumerate(values) if re.search('[0-9]+\.(?![0-9])', item)] + [len(values)]
>>> section = [values[location:section_ids[index + 1]] for index, location in enumerate(section_ids) if location != section_ids[-1]]
>>> pprint(section)
[['1.', 'Here', 'begins', 'section', '1'],
 ['2.', 'This', 'is', 'section', '2'],
 ['3.', 'Now', 'we', 'have', 'section', '3']]