jestem zmaga się z tym, ponieważ jestem pewien, że za kilkanaście-pętli nie jest rozwiązaniem dla tego problemu:Znalezienie klastrów numerów na liście
Jest uporządkowany wykaz numerów jak
numbers = [123, 124, 128, 160, 167, 213, 215, 230, 245, 255, 257, 400, 401, 402, 430]
i chcę utworzyć dict z listy numerów, przy czym różnica liczb (po siebie) wynosi nie więcej niż 15. Więc wyjście byłoby to:
clusters = {
1 : [123, 124, 128],
2 : [160, 167],
3 : [213, 215, 230, 245, 255, 257],
4 : [400, 401, 402],
5 : [430]
}
Mój obecny solutio n jest nieco brzydki (muszę usunąć duplikaty na końcu ...), jestem pewien, że można to zrobić w sposób pytonowy.
To jest to, co robię teraz:
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 klastrów] (http://en.wikipedia.org/wiki/K-means_clustering) będzie prawdopodobnie przydatne w tym przypadku. – Blender
[defaultdict] (http://docs.python.org/2/library/collections.html#collections.defaultdict) sprawiłoby, że twój kod byłby nieco prostszy. – tacaswell
Dzięki, przyjrzę się obydwu! – tamasgal