본문 바로가기
파이썬 독학

[파이썬] 아직도 for loop만 쓰시나요? list comprehension 으로 간편하게 코딩하기

by 데싸루나 2023. 2. 8.

파이썬에서는 List Comprehension(리스트 컴프리헨션)이라는 강력한 도구를 사용할 수 있다. 주로 for loop이나 while 문을 돌려야 하는 상황에 대신하여 쓸 수 있다. 몇 가지 예제를 보면서 어떻게 활용할 수 있는지 살펴보자. 

python-list-comprehension
title

list comprehension이 간편한 이유 (코드 예제)

 

 

만약 numbers라는 리스트 안에 [1,2,3,4,5] 라는 숫자가 담겨 있고, 새로운 리스트에 이 numbers안에 있는 숫자들을 각각 두 배씩 해서 새로 담는다고 가정하자. 가장 먼저 떠오르는 방법은 for 문을 돌려서 하나하나 두 배씩 해서 새로운 리스트에 넣어주는 방법이다. 

numbers = [1, 2, 3, 4, 5]
squared_numbers = []
for num in numbers:
    squared_numbers.append(num**2)
print(squared_numbers)  # Output: [1, 4, 9, 16, 25]

 

일반적인 프로그래밍 언어는 for loop을 이용하는게 가장 기본적이고 보편화된 방식이지만 파이썬에서는 List Comprehension(리스트 컴프리헨션)을 이용하면 코드를 더 간편하고 축약해서 작성을 할 수 있다. 아래 코드는 위에서 본 for문과 정확히 같은 기능을 하는 코드이다.

numbers = [1, 2, 3, 4, 5]
squared_numbers = [num**2 for num in numbers]
print(squared_numbers)  # Output: [1, 4, 9, 16, 25]

 

또 다른 예제를 살펴보자. 만약 [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 와 같은 매트릭스가 있고, 이를 [1, 2, 3, 4, 5, 6, 7, 8, 9]와 같이 새로운 리스트에 넣어주는 코드를 짠다고 할 때 for 문을 이용하면 아래와 같이 코드가 만들어질 것이다.

 

 

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flat_list = []
for sublist in matrix:
    for num in sublist:
        flat_list.append(num)
print(flat_list)  # Output: [1, 2, 3, 4, 5, 6, 7, 8, 9]

 

그리고 이는 While 문을 사용하면 다음과 같이 코드를 짤 수 있다. 

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flat_list = []
i = 0
while i < len(matrix):
    j = 0
    while j < len(matrix[i]):
        flat_list.append(matrix[i][j])
        j += 1
    i += 1
print(flat_list)  # Output: [1, 2, 3, 4, 5, 6, 7, 8, 9]

 

그런데 이 경우도, List Comprehension(리스트 컴프리헨션)을 이용할 수 있다. 이렇게 한 번의 loop이 아닌 두 번 이상 loop을 돌려야 하는 것을 list comprehension으로 처리하는 것을 Nested List Comprehension이라고 부른다. 

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flat_list = [num for sublist in matrix for num in sublist]
print(flat_list)  # Output: [1, 2, 3, 4, 5, 6, 7, 8, 9]

 

위에서 볼 수 있듯이, 코드가 훨씬 짧아지고 가독성도 더 높아졌다. 코드를 짜다 보면 반복문을 돌려야할 때가 정말 많은데 이때 list comprehension을 사용하면 생산성도 높이고 가독성도 높이는 코딩을 할 수 있다. 또한 loop 보다도 컴퓨터가 처리하는 속도가 빠른 것으로 알려져 있다. List Comprehension을 잘 활용해서 가독성 있고 효율적인 코딩을 해보자. (참고 포스팅 : 판다스 loc과 iloc 정복하기)

 

 

댓글