Python将数组分为正数和负数,同时保持列表结构

时间:2018-10-30 13:38:39

标签: python

我遇到了这个问题,我必须在保留列表结构的同时拆分一个负数和正数的列表。

  

零被认为是积极的

示例:

输入数据

[1,  1,  1, -2, -2, -2,  1,  1,  1, -2, -2, -2,  1,  1,  1]

输出数据

[[1,  1,  1], [-2, -2, -2], [1,  1,  1], [-2, -2, -2], [1,  1,  1]]

任何人都可以向我发送正确的指导,这将是解决此问题的好方法?

我调查了有条件的np.split或有条件的切片,但也没有运气。

2 个答案:

答案 0 :(得分:6)

无需进一步研究,我将使用标准库中的itertools.groupby。也许有更好的解决方案。

import itertools
vals = [1,  1,  1, -2, -2, -2,  1,  1,  1, -2, -2, -2,  1,  1,  1]
splitted = [list(g) for i, g in itertools.groupby(vals,lambda x: x<0)]

如评论中所述,您将必须选择处理0并相应地调整lambda。

答案 1 :(得分:2)

您可以使用熊猫:

import pandas as pd
l = [1,  1,  1, -2, -2, -2,  1,  1,  1, -2, -2, -2,  1,  1,  1]
s = pd.Series(l)
s.groupby(s.diff().ne(0).cumsum()).agg(list).tolist()

输出:

[[1, 1, 1], [-2, -2, -2], [1, 1, 1], [-2, -2, -2], [1, 1, 1]]

使用numpy的另一种解决方案:

np.split(l, np.diff(l).nonzero()[0]+1)

输出:

[array([1, 1, 1]),
 array([-2, -2, -2]),
 array([1, 1, 1]),
 array([-2, -2, -2]),
 array([1, 1, 1])]