python - Python中的分组/聚类数字

标签 python numbers iteration

我用谷歌搜索过,我已经测试过,这让我束手无策。我有一个需要按相似度分组的数字列表。例如,在 [1, 6, 9, 100, 102, 105, 109, 134, 139] 的列表中,将 1 6 9 放入列表中,将 100、102、105 和 109 放入列表中列表,以及 134 和 139。我的数学很糟糕,我已经尝试过这个,但我无法让它工作。为了尽可能明确,我希望将彼此相距 10 个值以内的数字分组。任何人都可以帮忙吗?谢谢。

最佳答案

有很多方法可以做到cluster analysis .一种简单的方法是查看连续数据元素之间的间隙大小:

def cluster(data, maxgap):
    '''Arrange data into groups where successive elements
       differ by no more than *maxgap*

        >>> cluster([1, 6, 9, 100, 102, 105, 109, 134, 139], maxgap=10)
        [[1, 6, 9], [100, 102, 105, 109], [134, 139]]

        >>> cluster([1, 6, 9, 99, 100, 102, 105, 134, 139, 141], maxgap=10)
        [[1, 6, 9], [99, 100, 102, 105], [134, 139, 141]]

    '''
    data.sort()
    groups = [[data[0]]]
    for x in data[1:]:
        if abs(x - groups[-1][-1]) <= maxgap:
            groups[-1].append(x)
        else:
            groups.append([x])
    return groups

if __name__ == '__main__':
    import doctest
    print(doctest.testmod())

关于python - Python中的分组/聚类数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14783947/

相关文章:

python - 我如何克服 Python http.client.HTTPResponse 对象?

c++ - 函数范式中嵌套循环的迭代过程

Python 优化 - 调用迭代函数会显着减慢我的程序速度吗?

python - 如何使用 Python 就地刷新多条打印行?

python - 隐藏所有这些网格,这样我就可以制作另一个 'page'

python - 在Python中控制线程执行时间

linux - 如何在Linux中获取目录中 ".c"和 ".h"文件末尾的行数?

javascript - 判断数组是否包含三个递增的连续数字

generics - 如何使用值编写代码[T : Numeric] more “flexible” like the “unboxed” counterparts?

ansible - 获取 csv 列表并使用序列对其进行迭代