我正在为此苦苦挣扎,因为我确信十几个 for 循环不是解决这个问题的方法:
有一个排序的数字列表,例如
numbers = [123, 124, 128, 160, 167, 213, 215, 230, 245, 255, 257, 400, 401, 402, 430]
我想创建一个带有数字列表的字典,其中数字的差异(彼此跟随)不超过 15。所以输出将是这样的:
clusters = {
1 : [123, 124, 128],
2 : [160, 167],
3 : [213, 215, 230, 245, 255, 257],
4 : [400, 401, 402],
5 : [430]
}
我目前的解决方案有点难看(我必须在最后删除重复项......),我确信它可以以 python 的方式完成。
这就是我现在所做的:
clusters = {}
dIndex = 0
for i in range(len(numbers)-1) :
if numbers[i+1] - numbers[i] <= 15 :
if not clusters.has_key(dIndex) : clusters[dIndex] = []
clusters[dIndex].append(numbers[i])
clusters[dIndex].append(numbers[i+1])
else : dIndex += 1