Счетаем значения по кол-ву пропусков в ряде
Как вычислить значения 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 шт):
Идти по списку, считать элементы пока они равны стартовому числу или 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]