我與掙扎,因爲我敢肯定,十幾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]
}
我現在搜索解決方案n有點難看(我必須在最後刪除重複的內容...),我相信它可以用pythonic的方式完成。
這就是我現在做的事:
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
[K-means clustering](http://en.wikipedia.org/wiki/K-means_clustering)在這種情況下可能會有用。 – Blender 2013-04-04 01:10:11
[defaultdict](http://docs.python.org/2/library/collections.html#collections.defaultdict)會讓你的代碼變得更簡單 – tacaswell 2013-04-04 01:13:34
謝謝,我會看看兩者! – tamasgal 2013-04-04 01:16:46