我有一个包含以下字符串的列表:
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'
列表2
'00:00'
'00:01'
'00:02'
'00:03'
'00:04'
我尝试查看列表切片,但问题是最后一个值,因此,元素的数量可能会改变。而且,我不确定我需要多少个较小的列表(以及我如何动态创建n个较小的列表?)
答案 0 :(得分:5)
我通常这样做:
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
不可避免的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))
答案 1 :(得分:3)
以明确的方式,您可以这样做:
sep = '00:00'
split_list = []
for item in Mainlist:
if item == sep:
split_list.append([item])
else:
split_list[-1].append(item)
print split_list
答案 2 :(得分:2)
理解是你最好的朋友:)。只有两行:
>>> a=['00:00', '00:01', '00:02', '00:03', '00:00', '00:01', '00:02']
>>> found=[index for index,item in enumerate(a) if item=='00:00'] + [len(a)]
>>> [a[found[i]:found[i+1]] for i in range(len(found)-1)]
[['00:00', '00:01', '00:02', '00:03'], ['00:00', '00:01', '00:02']]
以下是我们的工作:
我们搜索分隔符位置并获取包含分隔符索引的列表:
>>> found=[index for index,item in enumerate(a) if item=='00:00']
>>> found
[0, 4]
我们正在添加len(a)以包含最后一个字典。
创建新列表,拆分已创建的索引:
>>> [a[found[i]:found[i+1]] for i in range(len(found)-1)]
[['00:00', '00:01', '00:02', '00:03'], ['00:00', '00:01', '00:02']]
答案 3 :(得分:0)
我可以想到另一种方式: - )
def list_split(a):
#a=['00:00', '00:01', '00:02', '00:03', '00:00', '00:01', '00:02']
output = []
count = 0
if len(a) < 1:
output.append(a)
return output
for i, item in enumerate(a[1:]):
if item == a[0]:
output.append(a[count:i+1])
count = i + 1
else:
output.append(a[count:])
return output