Отфильтровать из списка все, кроме целых чисел

Цель задачи: Создать функцию, принимающую список и возвращающую отфильтрованный список только со значениями, которые имеют тип int.

Ввод:

def filter_list(l):
    i = 0
    while i != len(l):
        if isinstance(l[i],str):
            l.pop(i)
        i+=1
    return l
print(filter_list(['l',12,5,'4','ds']))

Ожидаемый вывод:

[12, 5]

Вывод:

[12, 5, 'ds']

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

Автор решения: MarianD
def filter_list(l):
    return [element for element in l if type(element) is int]

Вывод команды print(filter_list(['l',12,5,'4','ds'])):

[12, 5]

Объяснение:

[element for element in l if type(element) is int]

это так называемый генератор списка.

Я добавлю пробелы чтобы его разбить на 3 части:

[element       for element in l        if type(element) is int]

Нужно читать так:

«Для всякого элемент element списка l (средняя часть генератора)...,
...когда он типа int (последняя часть генератора)...,
...добавить элемент element в генерируемый список (первая часть генератора)

→ Ссылка
Автор решения: Эникейщик

А если заменить на наоборот:

def filter_list(l):
    i =  len(l)-1
    while i >=0:
        if isinstance(l[i],str):
            l.pop(i)
        i -= 1
    return l

print(filter_list(['l',12,5,'4','ds']))
→ Ссылка