在python中

时间:2015-06-16 10:30:37

标签: python list grouping

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

E.g。 [0,0,0,1,1,1,0,0,0,1,1] [0,0,0],[1,1,1],[0,0,0],[1,1]

1 个答案:

答案 0 :(得分:3)

您可以使用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的结果进行分组。因此,如果在bool上调用0,则会False,否则为True

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