본문 바로가기
Data Science

[데이터 사이언스 Python] Comprehension 기초, 한 줄로 표현하기 중첩 예제

by 한입만쥬 2023. 6. 6.

데이터 사이언스를 배우면서 다른 사람이 작성한 코드를 읽어야 할 때가 많을 것인데, 그럴 때 알고 있어야 할 파이썬 기초 지식인 comprehesion을 예제로 정리해 보겠습니다.

컴프리헨션 이란?

쉽게 말해 반복문이나 조건문을 한 줄로 표현하는 것이라고 할 수 있습니다. Iterable 한 객체들을 생성하기 위해 사용되는데, 특정 범위 내의 숫자들을 포함하는 리스트를 생성하고 싶은데 보다 간결하게 작성할 수 있게 도와주는 표현 방법이라고 하는 것이 좋겠습니다. 

 

list01 = list()

# list01.append 반복문으로 list01 채우기
for i in range(1, 11):
    list01.append(i)
print(list01)

# 위 코드를 한 줄로 표현
list02 = [i for i in range(1, 11)]
print(list02)

list01, list02 둘 다 똑같은 실행문인데 컴프리헨션을 사용해서 한 줄로 표현하니 코드가 훨씬 간결해진 것을 확인할 수 있습니다. 

 

반복문 + 조건문 comprehension

# 1 ~ 10 사이의 짝수만
list03 = [i for i in range(1, 11) if i % 2 == 0]  # 반복문 + 조건문
print(list03)
'''
위 명령은 아래와 똑같음 :
for i in range (1, 11):
    if i % 2 == 0
        list03.append(i)
'''

 

문자를 포함한 데이터들을 새로운 리스트로 만들기 

subjects = ['python', 'analysis', 'database', 'html', 'css', 'java',
            'engineer', 'django', 'javascript', 'science']
list04 = [sub for sub in subjects if 'a' in sub]  # subject 안의 sub를 가져오되, only if a를 포함하고 있다면
print(list04)

이렇게 리스트 요소들을 하나하나 훑고 싶을 때에도 사용하기 편리합니다. 

 

중첩 

개인적으로 조금 어려웠던 부분은 컴프리헨션 중첩 예제입니다. 대괄호가 어디서부터 어디까지인지 확인하고 차근차근 풀어나가니 점점 익숙해지는 것 같습니다. 

# [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15]]
list05 = [[4 * i + j for j in range(4)] for i in range(4)]
print(list05)

데이터를 더 쉽고 효율적이고 간결하게 담기 위한 문법이라는데 해석하는데 시간이 더 걸리는 저는 연습이 더 필요한가 봅니다..