如何将列表拆分为零值和非零值的子列表

Duk*_*Kim 2 python split list

对于这个给定的列表:

a = [1, 0, 0, 1, 1, 1, 3, 0,
     1, 1, 4, 2, 1, 1, 2, 1, 1, 1, 1,
     0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 5]
Run Code Online (Sandbox Code Playgroud)

我想将列表拆分为零和非零值的子列表,以获得所需的输出

a = [[1], [0,0], [1,1,1,3], [0],
     [1,1,3,2,1,1,2,1,1,1,1,],
     [0], [1], [0], [1,1,1], [0,0,0], [1,5]]
Run Code Online (Sandbox Code Playgroud)

我知道如何将列表拆分为一定长度的子列表,但我认为我不能在这里使用该方法......

Dar*_*ylG 5

您可以使用itertools.groupby

from itertools import groupby

a = [list(g) for k, g in groupby(a, lambda x:x>0)]
Run Code Online (Sandbox Code Playgroud)

groupby(a, lambda x:x>0)将连续的 0 值或非零值分组在一起。

上面仅处理非负值。FreddyMcloughlan 注释的改进可处理所有整数。

a = [list(g) for k, g in groupby(a, lambda x:x!=0)]
Run Code Online (Sandbox Code Playgroud)