def split_by_predicate(seq: Sequence[T],
predicate,
zero_delim: Optional[T]=None) \
-> Iterator[Sequence[T]]:
"""
Splits a sequence by delimeters that satisfy predicate,
keeping the delimeters
split_by_predicate([0, "One", 1, 2, 3,
"Two", 4, 5, 6, 7, "Three", "Four"],
predicate=lambda x: isinstance(x, str),
zero_delim="Nothing")
[["Nothing", 0], ["One", 1, 2, 3], ["Two", 4, 5, 6, 7],
["Three"], ["Four"]]
:param seq: sequence to proceed
:param predicate: checks whether element is delimeter
:param zero_delim: pseudo-delimter prepended to the sequence
:return: sequence of sequences
"""
g = [zero_delim]
for el in seq:
if predicate(el):
yield g
g = []
g.append(el)
yield g
# END BASED
评论列表
文章目录