2012-04-04 14 views
5

ile tamsayı listesi, bir liste var:piton grubu en yakın değerlere

d = [23,67,110,25,69,24,102,109] 

nasıl ben dinamik boşluk grup yakın değerler ve böyle bir başlığın oluşturabilir, en hızlı yöntem nedir? : Biz sıralı elemanları ve aralarındaki fark az ortalama sonra grup birlikte elemanları arasında bir ortalama farkı hesaplamak

[(23,24,25),(67,69),(102,109,110)] 
+2

k küme demektir. –

+4

"En yakın değerler" nasıl tanımlanır? Benim düşünceme göre, 102 hiç 109'a yakın değil ve kendi grubunda yer alıyor. Gruplamayı belirlemenin objektif bir yolu var mı? – Kevin

+0

Kevin ile aynı fikirdeyim. Hepsi çok aritlı - ki bu iyi bir şey - sadece sayıları nasıl bölmek istediğinizi ve aynı zamanda bunların bölünmesini nasıl istemediğinizi tanımlamak zorundasınız. –

cevap

10

yumruk

d = [23,67,110,25,69,24,102,109] 

d.sort() 

diff = [y - x for x, y in zip(*[iter(d)] * 2)] 
avg = sum(diff)/len(diff) 

m = [[d[0]]] 

for x in d[1:]: 
    if x - m[-1][0] < avg: 
     m[-1].append(x) 
    else: 
     m.append([x]) 


print m 
## [[23, 24, 25], [67, 69], [102, 109, 110]] 

gibi.

+0

teşekkürler, bu çalışma – pylover

+0

@ thg435: +1. Bu gerçekten zeki. Ancak, eğer d = [1,2,4,5] '' '' '' '[[1, 2] yerine' [[1], [2], [4], [5]] 'dır. [4, 5]]. Bu durum, 'diff' - 'diff = [data [i + 1] -data [i]' i aralıkta (len (data) -1)]' ve koşulunu 'x - m [değiştirerek sabitlenebilir. -1] [- 1] unutbu

İlgili konular