2024-05-15 03:52:16 发布
网友
我遇到了这样一个问题,在保持列表结构的同时,我必须拆分一个负数和正数的列表。在
Zeros are considered positive
示例:
输入数据
[1, 1, 1, -2, -2, -2, 1, 1, 1, -2, -2, -2, 1, 1, 1]
输出数据
有谁能给我一个好的方向,这是解决这个问题的好办法吗?在
我曾经研究过np.split和条件相关的切片,但也没有找到合适的方法。在
np.split
如果没有进一步的研究,我将使用标准库中的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。在
您可以使用熊猫:
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()
输出:
另一个使用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])]
如果没有进一步的研究,我将使用标准库中的itertools.groupby。也许还有更好的解决办法。在
如注释中所述,您必须选择如何处理0,并相应地调整lambda。在
您可以使用熊猫:
输出:
^{pr2}$另一个使用numpy的解决方案:
输出:
相关问题 更多 >
编程相关推荐