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]
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해주었습니다.
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
def filter_list(l):
return [i for i in l if not isinstance(i, str)]
로직는 비슷하지만, list comprehension을 이용해 단 한 줄짜리 함수로 만들었습니다.
가끔씩 list comprehension의 존재를 잊곤 하는데 이럴때 마다 다시 상기하곤 합니다. 다른 사람의 코드를 보는 일은 참 좋은 거 같습니다.