我有一个包含以下字符串的列表:
MainList
'00:00'
'00:01'
'00:02'
'00:03'
'00:04'
'00:00'
'00:01'
'00:02'
'00:03'
'00:04 "
我想在遇到'00:00'时将其拆分为较少数量的列表,因为'00:00'是唯一不会改变的元素:
期望的输出:
List1
'00:
00''00:
01''00:
02''00:
03''00:04'
List2
'00:
00''00:
01''00:
02''00:
03''00:04'
我试着查看列表切片,但问题是最后一个值,因此,元素的数量可能会改变.而且,我不确定我需要多少个较小的列表(以及我如何动态创建n个较小的列表?)
我经常这样做:
def splitby( lst, breaker='00:00'):
current = []
it = iter(lst)
first = next(it)
assert first==breaker, "`lst` must begin with `breaker`"
for item in it:
if item == breaker:
yield current
current = []
current.append(item)
yield current
Run Code Online (Sandbox Code Playgroud)
不可避免的itertools解决方案更为通用:
from itertools import groupby
class splitter(object):
def __init__(self, breaker):
self.breaker = breaker
self.current_group = 0
def __call__(self, item):
if item == self.breaker:
self.current_group+=1
return self.current_group
def group(self, items):
return (list(v) for k,v in groupby(items,self))
print list(splitter('00:00').group(items))
Run Code Online (Sandbox Code Playgroud)