Python

Python list comprehension을 잘못쓰는 경우

gilchris 2017. 5. 13. 18:02

Python 리스트 내에서 조건에 맞는 하나의 값을 찾는 경우에 python에는 list comprehension이 있지~라고 생각하고 아래와 같은 코드를 작성하는 경우가 있다.

foundData = [x if x = 3 in dataList][0]

위의 코드는 dataList의 모든 항목을 순환하면서 값이 3인것에 대한 하위목록(sub list)를 만든 뒤, 그 첫번째 항목을 가져오는 코드이다.
얼핏 보기에는 코드양도 적고 간단해보이기까지 한데, 이렇게 하면 프로그램이 불필요하게 많은 반복을 하게 된다.

위의 코드를 다시 풀어서 쓰면 아래와 같다.

tempList = []
for x in dataList:
    if x == 3:
        tempList.append(x)
foundData = tempList[0]

뭔가 이상하지 않은가? x가 3인 항목 하나만 찾으려고 했는데, if 안에 break가 없어서 리스트 전체를 순환하고 있다.
목록의 크기가 크지 않다면 별거 아닐 수 있으나 수십만, 수백만 개의 항목 중에서 하나를 찾는 경우에는 성능에 심각한 문제가 될 수 있다.

눈에 보기에 짧은 것이 다 좋은 것만은 아니다.