2016-08-23 6 views
3

У меня есть массив, как:группы кластеров чисел в массиве

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

И я хочу, чтобы подсчитать количество «въездных кластеров», которые >5. В этом случае результат должен быть 4, потому что:

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

Учитывая L длину массива, я могу сделать:

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] 

и это дает мне все записи больше, чем 5. Но как я мог группировать каждый кластер чисел?

+0

Подсказка: для кластера индексы 'k' будут целыми целыми числами. все, что вам нужно сделать, это (форт-пример) прогуливать список отфильтрованных индексов и увеличивать счетчик каждый раз, когда следующий индекс не является последовательным. – Julien

ответ

5

Вы можете использовать функцию groupby от itertools.

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

Я думаю, что это должно быть то, что я искал – urgeo

+0

@urgeo, тогда вы должны пометить этот ответ как правильный. – miindlek