컴프리헨션(Comprehension)

is Yoon·2023년 8월 16일
0

Python

목록 보기
9/17

컴프리헨션 Comprehension 이란?

컴프리헨션은 파이썬의 자료구조(list, dictionary, set)에 데이터를 좀 더 쉽고 간결하게 담기 위한 문법입니다.

여기서 말하는 '쉽고 간결하게' 데이터를 담는 방법이란 반복문과 조건문을 결합하여 하나의 구문으로 만들어 담는 것을 의미합니다.

컴프리헨션은 우리말로 '내포'라는 뜻으로, 리스트 컴프리헨션은 리스트 안에 코드가 내포되어 실행되는 것을 의미한다. 잘 활용하면 리스트 데이터를 반복해서 처리해야 할 때 코드를 한 줄로 작성할 수 있어서 편하다.


리스트 컴프리헨션 (List Comprehension)

1) 작성 방법

대괄호 [ ] 안에 표현식for문을 작성하여 사용할 수 있다.

  • list_variable = [expression for 변수 in iterable]
    list_variable = [반복 실행문 for 반복 변수 in 반복 범위]
  1. 반복 가능한 객체 iterable로부터 값을 하나 꺼내와서 변수에 담는다.
  2. 요소를 담은 변수를 활용해서 표현식(expression)을 실행한다.
  3. 표현식 결과 값을 리스트 요소에 넣는다.
  4. iterable로부터 받을 값이 없을 때까지 1~3번 과정을 반복한다.
list_a = [i for i in range(1, 10)]
print(list_a)
[1, 2, 3, 4, 5, 6, 7, 8, 9]

대괄호[ ] 대신 list() 함수를 이용할 수도 있다.

list_b = list(1**3 for i in range (10))
print(list_b)
[0, 1, 8, 27, 64, 125, 216, 343, 512, 729]

⚠️ 대괄호 [ ] 방식을 이용하는 것이 좋다.

2) if문, for문 활용

⭐ 컴프리헨션 문법에서는 if문중첩 for문을 사용할 수 있다.

  • list_variable = [expression for 변수 in iterable if 조건식]
list_c = [i for i in range(1) if i % 3 == 0]
print(list_c)
[0, 3, 6, 9]

반복 가능한 객체를 꺼내 조건문에 부합하는 것만 변수에 담아 표현식의 결과를 리스트의 요소에 담아 list_c 변수에 담는다.

  • list_variable = [expression for 변수 in iterable for 변수 in iterable]

✔️ 같은 결과, 다른 문법 비교

🔸 상황 1 : 리스트에 순차적으로 1부터 10까지의 값을 저장하고 싶을 때

🔹 예시 1 : 빈 리스트를 만들고 append() 함수로 하나씩 추가하는 방법

data = []
data.append(1)
data.append(2)
...
data.append(9)
data.append(10)

🔹 예시 2 : for문range() 함수를 사용하는 방법

data = []
for i in range(1, 11):
    data.append(i)

🔹 예시 3 : list() 함수를 이용하는 방법

data = list(range(1,11))

🔹 예시 4 : 리스트 컴프리헨션 문법을 이용하는 방법

data = [i for i in range(1, 11)]




🖐️ 여기서 더 복잡해진다면..?


🔸 상황 2 : 위의 리스트에서 짝수 값(2,4,6,8,10)만 저장하고 싶을 때

🔹 예시 1 : 일반적인 for문을 이용하는 방법

data = []
for i in range(1, 11):
    if i % 2 == 0:
        data.append(i)

🔹 예시 2 : 리스트 컴프리헨션 문법을 이용하는 방법

data = [i for i in range(1, 11) if i % 2 == 0]

🔸 상황 3

# 리스트 컴프리헨션
data = [(x, y) for x in range(1, 6) for y in range(1, 4)]

# for문
data2 = []
for i in range(1, 6):
    for j in range(1, 4):
        data2.append((i, j))

# 출력결과
[(1, 1), (1, 2), (1, 3), 
(2, 1), (2, 2), (2, 3), 
(3, 1), (3, 2), (3, 3), 
(4, 1), (4, 2), (4, 3), 
(5, 1), (5, 2), (5, 3)]




딕셔너리 컴프리헨션 (Dict Comprehension)

  • 기본적인 사용법은 리스트 컴프리헨션과 동일

1) 작성 방법

  • for문 앞에 키:값을 적고, 대괄호 []중괄호 {}로 바뀐다.
  • dict_variable = [expression for 변수 in iterable]
data = {i : i*2 for i in range(1, 6)}
{1: 2, 2: 4, 3: 6, 4: 8, 5: 10}

✔️ zip 함수를 활용하여 키와 값을 직접 가져와서 사용하는 방법

name = ["짱구", "철수", "유리"]
age = [23, 14, 42]
data = {key: value for (key, value) in zip(name, age)}
{'짱구': 23, '철수': 14, '유리': 42}

물론 if문을 활용할 수도 있다.

name = ["짱구", "철수", "유리"]
age = [23, 14, 42]

data = {key: value for (key, value) in zip(name, age) if value > 20}
{'짱구': 23, '유리': 42}




세트 컴프리헨션 (Set Comprehension)

  • 기본적인 사용법은 딕셔너리 컴프리헨션과 동일

1) 작성 방법

  • 키:값 형태를 적지 않고, 중괄호 {}를 쓴다.
  • set_variable = [expression for 변수 in iterable]
data = {i for i in range(1, 11)}
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
  • 참고로 중복값은 저장하지 않는다.
profile
planning design development with data

0개의 댓글