为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

明月笑刀无情 2021-07-29 13:15:44
我遇到了这个问题,我必须在保留列表结构的同时拆分负数和正数列表。零被认为是积极的例子:输入数据[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 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

如果没有进一步的研究,我会使用标准库中的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。


查看完整回答
反对 回复 2021-08-03
?
GCT1015

TA贡献1827条经验 获得超4个赞

您可以使用熊猫:


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])]


查看完整回答
反对 回复 2021-08-03
  • 2 回答
  • 0 关注
  • 148 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信