Python分组阈值

2024-06-02 07:55:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数字列表,我需要把它分组。itertools.grouby对于相同数字的序列非常有效,但是对于具有阈值(2-3%)的数字,我需要相同的行为

电子邮件:lst = [1, 500, 19885, 19886, 19895, 90000000] 我希望[[1], [500], [19885, 19886, 19895], [90000000]]

你能给我点建议吗?在


Tags: 列表电子邮件序列阈值数字建议itertoolslst
2条回答

您仍然可以使用groupby,但要使用自定义比较器:

class MyValue:
    def __init__(self, val):
        self.val = val
    def __eq__(self, other):
        # 2% leeway
        return self.val*0.98 <= other.val <= self.val*1.02

然后:

^{pr2}$

请注意,这将保留第一个值作为“参考”,因此在一个组中,元素与键/第一个值的距离最多为2%,但在组内,偏差可能会达到4%。在

这对你所展示的数据来说应该没问题,因为不同的组之间有显著的差异,但是对于紧密的组来说,这是不可靠的。在

扔掉他们。你需要提前手动计算出休息时间。你能提前分类吗?那样会更容易些。在

实际上,如果使用log,那么乘法阈值就变成了一个常量阈值,例如logland~=(-0.02,+0.02)中的0.98..1.02。 所以,用你所有的数字记录。 在进行groupby之前,你还需要把它们扔掉。在

如果你想要代码,给我们一个更好的(随机种子)可复制的例子,它有更多的数字来测试角落案例。在

相关问题 更多 >