如何使用标记元素拆分列表?
我正在尝试使用一些元素作为标记在Python中划分列表。例如,请考虑列表:
["marker1", "elem1", "elem2", "marker2", "elem3"]
我希望将其分为2个子列表:
[["marker1", "elem1", "elem2"], ["marker2", "elem3"]]
如果第一个元素不是标记,则将标记之前的元素视为单独的sublist:
# 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行。我的问题是如何使用列表理解或任何其他功能样式在一行(左右)中执行此操作。也欢迎其他任何优雅的解决方案。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
在开始或标记处创建(并包含)一个新的内部列表,否则将附加到当前的内部列表(< DMSULPOPUQTXHVZ7LM2FEUH@3DBF29/@dmuzsfijmmodcywyzyqcccccccccccccc3xrhx28M5IUH5Y0GMQMQAQMAEEZVDNGGEVDNGEVDNGEVDNGEV6BKNYYY2FYWUBD9JHZLGFV/7MIBLBCRBCRBCRBCRBCRBCRBCRBCR // avnxg“ rel =” nofollow noreferrer“ title =” python 3.8(预释放) - 在线尝试”>在线尝试!):
另一个(Try it online!):
Yet another (未经测试,现在无法测试):
Create (and include) a new inner list at the start or at a marker, otherwise append to the current inner list (Try it online!):
Another (Try it online!):
Yet another (untested, can't test now):
您可以查找列表中
标记
元素的索引,然后根据这些位置进行订书机:从这个答案。
You could look up the indexes of the
marker
elements in the list, and then take sublists based on those positions:Adapted from this answer.
这就是
i
看起来像[['elem1','elem2'],['marker1'],['elem3'],['marker2'],['elem4', 'elem5'],['marker3'],['elem6','elem7']]
,但是在发电机中,我们使用
zip
和i
i ASGenerator
要将每个2个列表组合在一起['Elem1','Elem2'] + ['Marker1']
edit1
edit2
this is how
i
look like[['elem1', 'elem2'],['marker1'],['elem3'],['marker2'],['elem4', 'elem5'],['marker3'],['elem6', 'elem7']]
but in a generator ofcourseso we use
zip
andi
asgenerator
to compine every 2 lists together['elem1', 'elem2'] + ['marker1']
Edit1
Edit2