是否有适用于通用列表类型的split
版本?例如,在Haskell中
Prelude> import Data.List.Split
Prelude Data.List.Split> splitWhen (==2) [1, 2, 3]
[[1],[3]]
答案 0 :(得分:16)
不。但您可以使用itertools.groupby()
来模仿它。
>>> [list(x[1]) for x in itertools.groupby([1, 2, 3], lambda x: x == 2) if not x[0]]
[[1], [3]]
答案 1 :(得分:1)
还有一个解决方案:
output = [[]]
valueToSplit = 2
data = [1, 2, 3, 4, 1, 2, 3, 4, 5, 6, 2, 5, 2]
for i, val in enumerate(data):
if val == valueToSplit and i == len(data)-1:
break
output.append([]) if val == valueToSplit else output[-1].append(val)
print output # [[1], [3, 4, 1], [3, 4, 5, 6], [5]]
答案 2 :(得分:0)
您还可以创建一个迭代器并使用itertools.takewhile
包含所有匹配项并丢弃分隔符:
>>> import itertools
>>> l = [1, 2, 3]
>>> a = iter(l)
>>> [[_]+list(itertools.takewhile(lambda x: x!=2, a)) for _ in a]
[[1], [3]]
答案 3 :(得分:0)
@ TigerhawkT3答案并非完美,但我无法添加评论
l = [1, 2, 2, 2, 2, 3, 4]
输出[[1], [2], [2, 3, 4]]
似乎“错了”,但他激励我
import itertools
l = [1, 2, 2, 2, 2, 3, 4]
a = iter(l)
output = [[_] + list(itertools.takewhile(lambda x: x != 2, a)) for _ in a if _ != 2]
output = [[1], [3, 4], [123, 123]]