I'm trying to split a list in Python using some elements as markers. For example, consider the list:
["marker1", "elem1", "elem2", "marker2", "elem3"]
I wish to split it into 2 sublists:
[["marker1", "elem1", "elem2"], ["marker2", "elem3"]]
If the first element is not a marker, the elements before the marker shall be considered as a separate sublist:
# From:
["elem1", "elem2", "marker1", "elem3", "marker2", "elem4", "elem5"]
# To:
[["elem1", "elem2"], ["marker1", "elem3"], ["marker2", "elem4", "elem5"]]
It is easy to do using a regular loop:
lst = ["elem1", "elem2", "marker1", "elem3", "marker2", "elem4", "elem5"]
separated = []
sub_lst = []
for elem in lst:
if elem[:6] == "marker" and sub_lst:
separated.append(sub_lst)
sub_lst = []
sub_lst.append(elem)
if sub_lst:
separated.append(sub_lst)
This code is 9 lines long. My question is how to do that in one line (or so) using list comprehension or any other functional style. Any other elegant solutions are welcome as well.