파이썬에서는 List Comprehension(리스트 컴프리헨션)이라는 강력한 도구를 사용할 수 있다. 주로 for loop이나 while 문을 돌려야 하는 상황에 대신하여 쓸 수 있다. 몇 가지 예제를 보면서 어떻게 활용할 수 있는지 살펴보자.
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 정복하기)
'파이썬 독학' 카테고리의 다른 글
파이썬으로 웹스크래핑 크롤링 하는 방법 (BeautifulSoup 사용) (0) | 2023.02.15 |
---|---|
코딩 실력 향상을 위해 LeetCode 리트코드 하세요. (0) | 2023.02.08 |
[파이썬] 판다스 데이터프레임 loc 과 iloc 인덱싱 사용법 정복하기 (0) | 2023.02.07 |
구글 코랩(colab) 데이터 파일 업로드 하는 2가지 방법 (0) | 2023.02.05 |
[파이썬 독학] 판다스 데이터 프레임 기초 - 데이터 로드, 조건부 필터링, merge, 클리닝, 플랏 그리기 (0) | 2023.02.01 |
댓글