我正在尝试使用一些元素作为标记在 Python 中拆分列表。例如,考虑以下列表:
["marker1", "elem1", "elem2", "marker2", "elem3"]
我希望将其拆分为 2 个子列表:
[["marker1", "elem1", "elem2"], ["marker2", "elem3"]]
如果第一个元素不是标记,则标记之前的元素应被视为单独的子列表:
# From:
["elem1", "elem2", "marker1", "elem3", "marker2", "elem4", "elem5"]
# To:
[["elem1", "elem2"], ["marker1", "elem3"], ["marker2", "elem4", "elem5"]]
使用常规循环很容易做到:
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)
这段代码有 9 行长。我的问题是如何使用列表理解或任何其他功能样式在一行(左右)中做到这一点。也欢迎任何其他优雅的解决方案。
在开头或标记处创建(并包含)一个新的内部列表,否则附加到当前的内部列表(在线尝试!):
a = None
separated = [a := [x] for x in lst if not a or x.startswith('marker') or a.append(x)]
另一个(在线尝试!):
separated = [
a
for a in [None]
for x in lst
if not a or x.startswith('marker') or a.append(x)
for a in [[x]]
]
还有一个(未经测试,现在无法测试):
from more_itertools import split_before
separated = list(split_before(lst, lambda s: s.startswith('marker')))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句