Посчитать пропуски в списке

Второй и последний вопрос (впринципе этот вопрос можно решить через перебор for i in, но это много строк и не так как надо, наверняка есть проcтой способ).

Как поcчитать кол-во nan в списке a = [np.nan,np.nan,8,np.nan,6,np.nan,np.nan,9,np.nan,np.nan,np.nan,3,np.nan] между 3-мя числовыми последними значениями и получить по ним список? Тоесть в списке есть последнии 3 значения это 6,9,3. Начиная с конца и пропуская первые nan, кол-во nan между 3 и 9 = 3. Между 9 и 6 = 2. Между 6 и 8 = 1. В таком случае ответ будет [1,2,3].


Ответы (3 шт):

Автор решения: MBo
from itertools import groupby
import numpy as np

A = [np.nan,np.nan,8,np.nan,6,np.nan,np.nan,9,np.nan,np.nan,np.nan,3,np.nan]
B = [len(list(y)) for x, y in groupby(A) if (x is np.nan)]
print(B)

>>[2, 1, 2, 3, 1]
→ Ссылка
Автор решения: strawdog

Не уверен, что предлагаемое решение сильно уменьшит количество строк и будет самым эффективным, но попробовать можно так:

import numpy as np

a = np.array([np.nan,np.nan,8,np.nan,6,np.nan,np.nan,9,np.nan,np.nan,np.nan,3,np.nan,np.nan,np.nan,np.nan,1,np.nan])

for i in np.split(a, np.ravel(np.argwhere(~np.isnan(a)))):
    print(np.count_nonzero(np.isnan(i)))

получим:

2
1
2
3
4
1
→ Ссылка
Автор решения: SergFSM

еще один похожий на уже предложенные способ:

import pandas as pd

idx = pd.Series(a).dropna().index
res = [j-i-1 for i,j in zip(idx,idx[1:])]

print(res)  # [1, 2, 3]
→ Ссылка