Comprehension은 파이썬에서 많이 사용하는 기능이다.

 

왜냐하면 가독성이 좋기 때문이다.

 

가장 먼저 살펴볼 list comprehension의 형태는 result = [expr for val in collection if condition이며,

 

이를 for문으로 나타낸다면

 

result = []

for val in collection:

    if condition:

        result.append(expr)

 

위와 같이 result의 결과값은 같지만, 표현식은 comprehension이 훨씬 가독성이 좋은 것을 알 수 있다.

 

예를 들어 문자열 리스트에서 문자열의 길이가 2초과인 문자열만 추출하는 코딩을 한다면,

x.upper()는 x값을 대문자로 표시하라는 의미이며, strings안의 x를 추출해라 만약 len(x), 즉 문자열의 갯수가 2를 초과할 경우는 의미이며, 결과값은 문자열이 최소 3개 이상인 값으로 리스트가 만들어졌다.

 

이를 for문으로 사용한다면

 

result = []

for x in strings:

    if len(x) > 2:

        result.append(x)

print(result)

 

이런식으로 최소 5줄이 된다. 가독성 부분이나, 작성하는 부분이나 Comprehension이 더 편리하다.

 

하지만 처음에 익숙하지 않다면 Comprehension보다는 for문으로 충분히 연습을 한 후 Comprehension을 사용해야 코딩을 이해하는데 더 큰 도움이 될 것이다.

 

Comprehension은 리스트 말고도 딕셔너리에도 적용이 되는데, 형태는 다음과 같다

dict_comp = {key-expr : value-expr for value in collection if condition}

 

집합에서는 대괄호 대신 중괄호를 쓴다는 점만 빼면 리스트 Comprehension과 동일하다.

set_comp = {expr for value in collection if codition}

 

위에서 사용한 strings를 사용하여 집합으로 추출해보면,

집합은 간단하게 strings내의 문자열 갯수를 집합으로 추출했다.

 

이번에는 strings내의 값을 활용하여 딕셔너리 형태로 추출해보면,

enumerate를 활용하여 strings의 요소를 하나씩 빼올때마다 그 값을 key값으로 지정하고, 그에 대한 순서를 value값으로 지정하여 딕셔너리를 만들었다.

 

 

만약 리스트 안의 요소가 많이 있다면 눈으로 원하는 자료를 추출하는 것은 불가능 할 것이다. 다음은 조금 더 복잡한 list comprehension을 작성해보도록 하겠다.

all_data안에는 여러가지 이름이 들어있다.

 

하지만 여기서 원하는 데이터는 'e'가 두번 이상 들어간 이름을 찾기를 원하고

 

name.count('e') >= 2라는 조건을 주어 결과값을 name_of_interset에 추가하는 모습이다.

 

결과값은 'Steven'이라는 값이 추출되었고, 이는 우리가 찾던 결과값과 동일했다.

+ Recent posts