리스트에 빈 스트링을 지워주려면?


발생하는 문제 및 실행환경

리스트 원소 중에 빈 스트링을 다 지워주려면 어떻게 해야 하나요? 제가 쓴 방법보다 더 좋은 코드나 더 파이썬스러운 코드를 알려주세요

소스코드

while '' in str_list:
    str_list.remove('')
  • 2016년 01월 19일에 작성됨

조회수 207


1 답변


좋아요
0
싫어요
채택취소하기

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]
  • 2016년 01월 19일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close