[python] comprehension

1. Comprehension 이란

하나 이상의 iterator로부터 파이썬의 자료구조를 간결하게 만드는 방법을 말합니다. 간단한 구문으로 반복문과 조건 테스트를 결합할 수 있게 해줍니다.

2. list comprehension

1부터 10까지 정수 중 홀수로 된 리스트를 만들어 보겠습니다.


>>>ls = []
>>>for num in range(1, 11):
if num % 2 == 1:
ls.append(num)
>>>ls
[1, 3, 5, 7, 9]
# comprehension을 사용한 방법
>>>ls = [num for num in range(1, 11) if >>>num % 2 == 1]
>>>ls
[1, 3, 5, 7, 9]

다음 코드를 컴프리헨션을 사용해 바꿔보겠습니다.

>>>rows = range(1, 5)
>>>cols = range(1, 3)
>>>for row in rows:
for col in cols:
print(row, col)
1 1
1 2
2 1
2 2
3 1
3 2
4 1
4 2

# comprehension을 사용한 방법

# (row, col) 튜플 리스트를 만들어서 cells 변수에 할당
>>>rows = range(1, 5)
>>>cols = range(1, 3)
>>>cells = [(row, col) for row in rows for col in cols]
# 각 튜플로부터 row와 col만 출력하도록 tuple unpacking
>>>for row, col in cells:
print(row, col)
1 1
1 2
2 1
2 2
3 1
3 2
4 1
4 2

3. dictionary comprehension

딕셔너리도 컴프리헨션이 있습니다. 다음은 문자열 ‘datascience’의 11글자를 반복하면서 글자가 몇 번 나왔는지 세는 코드입니다.

>>>word = 'datascience'
>>>letter_count = {x: word.count(x) for x in word}
>>>letter_count
{'d': 1, 'a': 2, 't': 1, 's': 1, 'c': 2, 'i': 1, 'e': 2, 'n': 1}

4. set comprehension

셋 컴프리헨션도 리스트 컴프리헨션과 딕셔너리 컴프리헨션과 비슷한 모양을 하고 있습니다.

a_set = {num in num in range(1, 6) if num % 3 == 1}
a_set
{1, 4}

5. generator comprehension

제너레이터 컴프리헨션은 제너레이터 객체를 반환합니다. 제너레이터란 이터레이터에 데이터를 제공하는 방법 중 하나입니다.
먼저 제너레이터 컴프리헨션은 다음과 같은 형태를 가집니다.

nums = (num for num in range(1, 6))

제너레이터 객체를 바로 순회할 수 있습니다.

for num in nums:
print(num)
1
2
3
4
5

제너레이터 컴프리헨션에 list() 를 wrapping 하면 리스트 컴프리헨션처럼 만들 수도 있습니다.

nums = (num for num in range(1, 6))
>>> num_list = list(nums)
>>> num_list

*이 포스트는 Introducing Python
을 보고 작성했습니다.