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'이라는 값이 추출되었고, 이는 우리가 찾던 결과값과 동일했다.
'Data organization > 개념정리' 카테고리의 다른 글
문자가 깨지는 경우 해결방법(텍스트 데이터와 바이너리 데이터) (0) | 2021.02.15 |
---|---|
함수란?(Function) (0) | 2021.02.12 |
파이썬 연산(집합) (0) | 2021.02.03 |
딕셔너리(Dictionary) (0) | 2021.02.03 |
자료형 함수 (0) | 2021.01.28 |