1. Question

In this kata you will create a function that takes a list of non-negative integers and strings and returns a new list with the strings filtered out.

Example)

filter_list([1,2,'a','b']) == [1,2]
filter_list([1,'a','b',0,15]) == [1,0,15]
filter_list([1,2,'aasf','1','123',123]) == [1,2,123]

2. My Solution

def filter_list(input_list):
  filtered_list = list()
  for element in input_list:
      if isinstance(element, int):
          filtered_list.append(element)
  return filtered_list

isinstance를 활용했습니다.
input으로 들어오는 list들의 요소 하나하나에 접근해서
그 요소가 integer 일때 새로 생성한 list에 append해주었습니다.

3. Method For Best Solution

python에는 Built-in Functions중에 isinstance메서드가 존재합니다.

isinstance(object, class)

첫 번째 argument로 instance, 두 번째 argument로 class 이름을 받습니다.
입력으로 받은 instance가 그 class의 instance인지를 판단하여 Boolean을 return합니다.

>>> type(1)
<class 'int'>

>>> type(1.0)
<class 'float'>

>>> type('a')
<class 'str'>

>>> isinstance(1, int)
True

>>> isinstance(1.0, float)
True

>>> isinstance('a', str)
True

Built-in Types로는 int, float, complex, str 등 이 있으며
따로 선언한 class의 경우에도 isinstance()메서드로 확인할 수 있습니다.

>>> class Test():
...     def test_method(self):
...         return 'test return'
...
>>> test_instance = Test()
>>> type(test_instance)
<class '__main__.Test'>
>>> isinstance(test_instance, Test)
True

4. Best Solution

def filter_list(l):
  return [i for i in l if not isinstance(i, str)]

로직는 비슷하지만, list comprehension을 이용해 단 한 줄짜리 함수로 만들었습니다.
가끔씩 list comprehension의 존재를 잊곤 하는데 이럴때 마다 다시 상기하곤 합니다. 다른 사람의 코드를 보는 일은 참 좋은 거 같습니다.