2016-08-23 3 views
3

Ich habe ein Array wie:Gruppe Cluster von Zahlen in Array

A = [1,3,8,9,3,7,2,1,3,9,6,8,3,8,8,1,2] 

Und ich will die Zahl der „Eintrag Cluster“ zählen, die >5 sind. In diesem Fall sollte das Ergebnis 4 sein, denn:

[1, 3, (8,9), 3, (7), 2, 1, 3, (9,6,8), 3, (8,8), 1, 2] 

L Länge des Arrays Da kann ich tun:

A = [1,3,8,9,3,7,2,1,3,9,6,8,3,8,8,1,2] 
A = np.array(A) 

for k in range(0,L): 
    if A[k]>5: 
     print k, A[k] 

und das gibt mir alle Einträge größer als 5. Aber wie könnte ich jeden Cluster von Zahlen gruppieren?

+0

Hinweis: Bei einem Cluster sind die Indizes 'k' aufeinanderfolgende ganze Zahlen. Alles, was Sie tun müssen, ist (zB) Ihre Liste gefilterter Indizes zu durchlaufen und einen Zähler jedes Mal zu erhöhen, wenn der nächste Index nicht fortlaufend ist. – Julien

Antwort

5

Sie könnten die groupby Funktion von itertools verwenden.

from itertools import groupby 

A = [1,3,8,9,3,7,2,1,3,9,6,8,3,8,8,1,2] 
result = [tuple(g) for k, g in groupby(A, lambda x: x > 5) if k] 

print(result) 
# [(8, 9), (7,), (9, 6, 8), (8, 8)] 

print(len(result)) 
# 4 
+0

Ich denke, das sollte sein, was ich suchte – urgeo

+0

@urgeo dann sollten Sie diese Antwort als richtig markieren. – miindlek