在Python中按lambda函数分割列表

9 投票
4 回答
7882 浏览
提问于 2025-04-16 19:18

有没有一种版本的 split 函数可以在通用列表类型上使用?比如在 Haskell 语言中。

Prelude> import Data.List.Split
Prelude Data.List.Split> splitWhen (==2) [1, 2, 3]
[[1],[3]]

4 个回答

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]]
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]]
18

不行。不过你可以用 itertools.groupby() 来模拟这个效果。

>>> [list(x[1]) for x in itertools.groupby([1, 2, 3], lambda x: x == 2) if not x[0]]
[[1], [3]]

撰写回答