为了账号安全,请及时绑定邮箱和手机立即绑定

按值拆分列表的快速方法?

按值拆分列表的快速方法?

繁星点点滴滴 2022-10-06 15:44:37
有什么方法可以将列表拆分为某个值 - 本质上是列表的 string.split() 。例子:[1, 2, 4, 3, 5, 2, 5]会回来[[1], [4, 3, 5], [5]]我可以想到一些速度很慢的解决方案,但我正在使用它来尝试加速代码,因此如果它在大约 10,000 个小(个位数)数字长度的列表上运行缓慢,那么它不会真的有帮助,我想到了一个简单的解决方案,比如list1 = [1, 2, 4, 3, 5, 2 etc.]list2 = []for i, val in enumerate(list1):    if val == 2:         list2.append([])    else:         list2[len(list2)-1].append(val)但我不确定这真的非常快。有没有更好的办法?
查看完整描述

2 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

好吧,我能想到的是使用 list.index() 和切片。


sep = somevalue

result = []

while sep in yourlist:

    sep_index = list.index(sep)

    result.append(list[:sep_index])

    result = result[sep_index+1:]

这应该通过您设置的任何 sep 值分隔一个长列表


查看完整回答
反对 回复 2022-10-06
?
暮色呼如

TA贡献1853条经验 获得超9个赞

我喜欢itertools.groupby这个。较长的列表易于阅读、快速且内存高效:


from itertools import groupby


l = [1, 2, 4, 3, 5, 2, 5]


[list(g) for k, g in groupby(l, key=lambda x: x!=2) if k]

# [[1], [4, 3, 5], [5]]


查看完整回答
反对 回复 2022-10-06
  • 2 回答
  • 0 关注
  • 59 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信