首页 > 解决方案 > 根据符号变化创建列表

问题描述

我在一列中有 excel 数据(浮点数),其中每几百行发生 20 次变化。该列表有几千行长,但简单地说它看起来像这样[5, 4, 3, 2, 1, -5, -4, -3, -2, -1, 5, 4, 3, 2, 1, -5, ...]

我需要包含所有数字的列表,直到发生符号更改,然后开始一个新列表,直到下一个符号更改。所以总的来说,我希望返回尽可能多的列表作为标志的变化。我需要那些做数值积分。不过我可以这样做...

你能给我一个像上面那样的短数组的例子吗?我真的不在乎它是否将结果作为函数的返回值或定义新变量。无论是更容易或更优雅。

谢谢你们的帮助。

标签: python

解决方案


假设您想按符号分组,您可以使用itertools.groupby

from itertools import groupby

data = [5, 4, 3, 2, 1, -5, -4, -3, -2, -1, 5, 4, 3, 2, 1, -5]


def groupby_sign(lst):
    return [list(group) for _, group in groupby(lst, key=lambda x: x < 0)]

result = groupby_sign(data)
print(result)

输出

[[5, 4, 3, 2, 1], [-5, -4, -3, -2, -1], [5, 4, 3, 2, 1], [-5]]

推荐阅读