Как создать список с заданным числом последних значений?

В списке:

a = [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] 

Нужно выбрать последние три значения, чтобы получить новый список:

[9,3,1]

Как это правильно сделать?


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

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

Ну хорошо, поверим, что не учебное задание. Как-то так можно с помощью filter и среза:

print(list(filter(lambda x: not np.isnan(x), a))[-3:])

Вывод:

[9, 3, 1]

Наверное, можно было бы как-то и без lambda, но я не знаю, как инвертировать условие фильтрации без неё и не прибегая к дополнительным библиотекам.

С помощью Numpy можно было бы ещё так:

a = np.array(a)
print(a[~np.isnan(a)][-3:])

Вывод:

[9. 3. 1.]

Но в этом случае числа превратятся в np.float из-за np.nan в массиве. Можно их и обратно преобразовать в np.int, если нужно.

→ Ссылка