我在谷歌上搜索过,我做过测试,这让我神志不清。我有一个按相似性分组的数字列表。例如,在[1、6、9、100、102、105、109、134、139]的列表中,16 9将被放入列表中,100、102、105和109将被放入列表中,134和139将被放入列表中。我数学很差,我已经试过了,但我不能让它工作。为了尽可能明确,我希望将彼此相差10个值以内的数字分组。有人能帮忙吗?谢谢。

最佳答案

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

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/

10-08 21:09