리스트에 빈 스트링을 지워주려면?
조회수 7590회
발생하는 문제 및 실행환경
리스트 원소 중에 빈 스트링을 다 지워주려면 어떻게 해야 하나요? 제가 쓴 방법보다 더 좋은 코드나 더 파이썬스러운 코드를 알려주세요
소스코드
while '' in str_list:
str_list.remove('')
1 답변
-
1. filter(function, iterable)를 사용하는 4가지 방법:
str_list = filter(None, str_list) # 빠름 str_list = filter(bool, str_list) # 빠름 str_list = filter(len, str_list) # 약간 느림 str_list = filter(lambda item: item, str_list) # list 내장(comprehension)보다 느림
4가지 방법의 속도를 비교해보면 다음과 같이 나옵니다.
>>> timeit('filter(None, str_list)', 'str_list=["a"]*1000', number=100000) 2.4797441959381104 >>> timeit('filter(bool, str_list)', 'str_list=["a"]*1000', number=100000) 2.4788150787353516 >>> timeit('filter(len, str_list)', 'str_list=["a"]*1000', number=100000) 5.2126238346099854 >>> timeit('[x for x in str_list if x]', 'str_list=["a"]*1000', number=100000) 13.354584932327271 >>> timeit('filter(lambda item: item, str_list)', 'str_list=["a"]*1000', number=100000) 17.427681922912598
2. list 내장(comprehension)을 쓰는 방법
strings = ["first", "", "second"] [x for x in strings if x]
댓글 입력