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

有什么方法可以将列表拆分为某个值 - 本质上是列表的 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)

但我不确定这真的非常快。有没有更好的办法?


繁星点点滴滴
浏览 69回答 2
2回答

跃然一笑

好吧,我能想到的是使用 list.index() 和切片。sep = somevalueresult = []while sep in yourlist:    sep_index = list.index(sep)    result.append(list[:sep_index])    result = result[sep_index+1:]这应该通过您设置的任何 sep 值分隔一个长列表

暮色呼如

我喜欢itertools.groupby这个。较长的列表易于阅读、快速且内存高效:from itertools import groupbyl = [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]]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python