Tôi đang phải vật lộn với điều đó, vì tôi chắc chắn rằng một chục cho-vòng không phải là giải pháp cho vấn đề này:Tìm cụm số trong một danh sách
Có một danh sách sắp xếp các con số như
numbers = [123, 124, 128, 160, 167, 213, 215, 230, 245, 255, 257, 400, 401, 402, 430]
và tôi muốn tạo một dict với danh sách các số, trong đó sự khác biệt của những con số (sau mỗi khác) là không quá 15. vì vậy, đầu ra sẽ là:
clusters = {
1 : [123, 124, 128],
2 : [160, 167],
3 : [213, 215, 230, 245, 255, 257],
4 : [400, 401, 402],
5 : [430]
}
My hiện tại solutio n là một chút xấu xí (tôi phải loại bỏ các bản sao ở cuối ...), tôi chắc chắn nó có thể được thực hiện theo một cách nhiệt tình.
Đây là những gì tôi làm bây giờ:
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) có thể sẽ hữu ích trong trường hợp này. – Blender
[defaultdict] (http://docs.python.org/2/library/collections.html#collections.defaultdict) sẽ làm cho mã của bạn đơn giản hơn một chút – tacaswell
Cảm ơn, tôi sẽ xem xét cả hai! – tamasgal