我遇到了这个问题,我必须在保留列表结构的同时拆分一个负数和正数的列表。
零被认为是积极的
示例:
输入数据
[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
或有条件的切片,但也没有运气。
答案 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])]