我使用itertools.groupby来解决这类问题(获取一个集合集合,在内部集合中按标记拆分)from itertools import groupby
class GroupbyHelper:
def __init__(self, token):
self.token = token
self.count = 0
def __call__(self, item):
self.count += (item[0] == self.token)
return self.count
grouped_collections = \
[list(grouped) for _, grouped in groupby(collections, GroupbyHelper("MARK_A"))]
以上代码的一般版本:
^{pr2}$
使用两个迭代器:from itertools import tee, zip_longest
iter1, iter2 = tee(i for i, item in enumerate(collections) if item[0] == 'MARK_A')
next(iter2) #advance the second iterator so we can move by range
grouped_collections = \
[collections[s:e] for s, e in zip_longest(iter1, iter2, fillvalue=len(collections))]
有时候一个普通的for循环也没那么糟糕:grouped_collections = []
for lst in collections:
if lst[0]=="MARK_A":
grouped_collections.append([lst])
else:
grouped_collections[-1].append(lst)