Счетаем значения по кол-ву пропусков в ряде

Как вычислить значения a=0,b=0,c=0 из списка h? Значения формируем путем подсчета пропусков между цифрами.

h = [nan,10,nan,nan,20,20,nan,nan,nan,5,nan,4,nan]

Сначала между 10 и 20 - это будет значение а = 3. Затем 20 и 5 - это будет значение b=5 (20,20 - подряд не считается, берем только первое), затем 5 и 4 - это значение c=2.

a,b,c это три значения которые будут получены, но например для c может не хватить значения из списка, тогда оно все еще будет 0. Также может появится дополнительная буква d к примеру, поэтому делаю на вырост так сказать. Как можно правильно сделать такое, максимально компактно в пару строчек?


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

Автор решения: GrAnd

Идти по списку, считать элементы пока они равны стартовому числу или nan. Если элемент не равен стартовому или nan, то начинать новый счётчик. И таким образом продолжать до конца списка.

На выходе будет список с искомыми диапазонами. Первый (до первого числа) и последний (после последнего числа) отбрасывается, т.к. они вам не нужны.

nan = None
h = [nan,10,nan,nan,20,20,nan,nan,nan,5,nan,4,nan]

last_num = None
res = [1]
for elem in h:
    if elem in (nan, last_num): 
        res[-1] += 1
    else:
        res.append(1)
        last_num = elem

res = res[1:-1]
print(res)

Результат:

[3, 5, 2]
→ Ссылка