在 python 中分组 0 和 1

Grouping 0s and 1s in python

我有一个零数组和一个数组,例如 [0,0,0,1,1,1,0,0,0,1,1]。如何编写程序将相邻的 0 和 1 保存在不同的数组中。

例如 [0,0,0,1,1,1,0,0,0,1,1] 给予 [0,0,0],[1,1,1],[0,0,0],[1,1].

您可以将它们与 itertools.groupby 分组,像这样

>>> data = [0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1]
>>> from itertools import groupby
>>> [list(group) for item, group in groupby(data)]
[[0, 0, 0], [1, 1, 1], [0, 0, 0], [1, 1]]

groupby 的结果将是实际项目的元组和给出分组项目的迭代器。我们只是将分组的项目转换为列表,其中 list(group).


根据评论,

>>> data = [1, 2, 1, 3, 4, 5, 6, 7, 1, 2, 3]
>>> flag = [0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1]

创建一个生成器,将乘以值,

>>> gen = (d * v for d, v in zip(data, flag))

现在,根据对每个号码调用 bool 的结果进行分组。所以,如果在 0 上调用 bool,它将给出 False,否则 True.

>>> [list(g) for _, g in groupby(gen, key=bool)]
[[0, 0, 0], [3, 4, 5], [0, 0, 0], [2, 3]]