Python | Фильтрация списка

Нужно создать функцию, которая берёт список неотрицательных целых чисел и строк и возвращает новый список с отфильтрованными строками | CodeWars

Пример: filter_list([1,2,'a','b']) == [1,2]

Я написал следующий код, но он проходит не все тесты (в закрепе 3-ий выдаёт ошибку).

def filter_list(l):
    new_l = []
    for i in range (len(l)):
        try:
            int(l[i])
            new_l.append(l[i])
        except ValueError:
            continue
    
    return new_l

Тесты:

import codewars_test as test
from solution import filter_list

@test.describe('Sample tests')
def sample_tests():
    @test.it('should work for basic examples')
    def basic_examples():
        test.assert_equals(filter_list([1, 2, 'a', 'b']), [1, 2], 'For input [1, 2, "a", "b"]')
        test.assert_equals(filter_list([1, 'a', 'b', 0, 15]), [1, 0, 15], 'Fot input [1, "a", "b", 0, 15]')
        test.assert_equals(filter_list([1, 2, 'aasf', '1', '123', 123]), [1, 2, 123], 'For input [1, 2, "aasf", "1", "123", 123]')

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

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

Судя по третьему тесту строки вида '123' считаются строками и должны пропускаться, а у вас они успешно преобразуются в int и добавляются.

Нужно проверять, что текущий элемент уже имеет тип int, это делается примерно так:

if isinstance(l[I], int):
→ Ссылка
Автор решения: fghfghfg2

Решение через генератор списка(где в список будут добавляться значения, удовлетворявшие условию isinstance(item, int)):

def filter_list(items):   
    return [item for item in items if isinstance(item, int)]

Так же советую вместо range (len(l)) использовать встроенную функцию enumerate, пример:

for i, item in enumerate(items):
    pass

Где, i - индекс элемента, item - само значение.

→ Ссылка