首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python群阈值

Python群阈值
EN

Stack Overflow用户
提问于 2016-10-28 06:46:36
回答 2查看 477关注 0票数 0

我有一个号码列表,我需要把它分组。对于相同数目的序列,itertools.grouby可以很好地工作,但是对于阈值数(2-3%),我需要同样的行为。

lst = [1, 500, 19885, 19886, 19895, 90000000]和我希望[[1], [500], [19885, 19886, 19895], [90000000]]

你能给我点建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-28 06:56:18

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

代码语言:javascript
复制
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

然后:

代码语言:javascript
复制
for key, group in groupby(map(MyValue, values)):
    group_values = [el.val for el in group]

请注意,这将使第一个值保持为“引用”,因此在一个组中,元素与键/第一个值之间的距离高达2%,但在组内,偏差可能高达4%。

这应该与您已经显示的数据是好的,如果不同的组是显著分开,但它将是不可靠的密切组。

票数 2
EN

Stack Overflow用户

发布于 2016-10-28 06:54:35

打他们。你需要事先手工算出断点。那么,你能事先整理一下吗?这会让事情变得更容易。

实际上,如果使用log,那么乘性阈值就会变成一个恒定的阈值,例如在原木~= (-0.02,+0.02)中的0.98.1.02。所以,用你所有数字的日志。在做groupby之前,您仍然需要对它们进行敲击。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40299538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档