Python

[Python] list comprehension, dict comprehension

huhulog 2025. 1. 28. 17:33

※ 본 게시글은 openAI를 통해, 초고를 작성한 뒤 작성한 포스트입니다.

 

 

Python을 사용하다 보면 데이터를 처리하고 변환하는 코드를 간결하게 작성해야 할 때가 많다.

특히, 축약 없이 빈리스트나 딕셔너리에 반복문을 사용하는 코드는  가독성이 심히 떨어진다.

이때 **리스트 컴프리헨션(list comprehension)**과 **딕셔너리 컴프리헨션(dict comprehension)**은 매우 유용한 도구이다. 이번 글에서는 이 두 문법의 기초 개념, 사용 방법, 그리고 실용적인 예제를 소개하겠다.


리스트 컴프리헨션이란?

리스트 컴프리헨션은 기존 리스트를 기반으로 새로운 리스트를 생성하는 간결한 문법이다.

반복문과 조건문을 한 줄로 작성할 수 있어 코드의 가독성과 생산성을 높여준다.

기본 문법

[표현식 for 요소 in iterable]
[표현식 for 요소 in iterable if 조건문]
  • 표현식: 리스트의 각 요소를 변환하는 식
  • 요소: 반복 가능한 객체(iterable)의 개별 항목
  • 조건문: (선택적) 특정 조건을 만족하는 경우에만 요소를 포함

예제 1: 숫자 제곱 리스트 만들기

# 기존 방식
squares = []
for x in range(10):
    squares.append(x ** 2)

# 리스트 컴프리헨션 방식
squares = [x ** 2 for x in range(10)]
print(squares)
# 출력: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

예제 2: 조건 추가하기

# 짝수의 제곱만 포함
even_squares = [x ** 2 for x in range(10) if x % 2 == 0]
print(even_squares)
# 출력: [0, 4, 16, 36, 64]

예제 3: if와 else 사용하기

# 홀수는 "홀수" 문자열로, 짝수는 제곱으로 변환
result = [x ** 2 if x % 2 == 0 else "홀수" for x in range(10)]
print(result)
# 출력: [0, '홀수', 4, '홀수', 16, '홀수', 36, '홀수', 64, '홀수']
  • x ** 2 if x % 2 == 0 else "홀수": 짝수일 경우 x ** 2, 홀수일 경우 "홀수"를 반환.

딕셔너리 컴프리헨션이란?

딕셔너리 컴프리헨션은 리스트 컴프리헨션과 유사하지만, 딕셔너리를 생성하기 위한 문법이다.

키와 값을 한 줄로 정의하여 딕셔너리를 효율적으로 생성할 수 있다.

기본 문법

{키_표현식: 값_표현식 for 요소 in iterable}
{키_표현식: 값_표현식 for 요소 in iterable if 조건문}
  • 키_표현식: 딕셔너리의 키를 정의하는 식
  • 값_표현식: 딕셔너리의 값을 정의하는 식
  • 조건문: (선택적) 특정 조건을 만족하는 경우에만 포함

예제 1: 숫자와 제곱의 매핑 딕셔너리 생성

# 기존 방식
squares_dict = {}
for x in range(5):
    squares_dict[x] = x ** 2

# 딕셔너리 컴프리헨션 방식
squares_dict = {x: x ** 2 for x in range(5)}
print(squares_dict)
# 출력: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

예제 2: 조건 추가하기

# 홀수의 제곱만 포함
odd_squares_dict = {x: x ** 2 for x in range(10) if x % 2 != 0}
print(odd_squares_dict)
# 출력: {1: 1, 3: 9, 5: 25, 7: 49, 9: 81}

예제 3: if와 else 사용하기

딕셔너리 컴프리헨션에서도 ifelse를 활용하여 키-값을 조건에 따라 다르게 설정할 수 있다.

# 키는 숫자, 값은 "짝수" 또는 "홀수" 문자열로 설정
even_odd_dict = {x: "짝수" if x % 2 == 0 else "홀수" for x in range(10)}
print(even_odd_dict)
# 출력: {0: '짝수', 1: '홀수', 2: '짝수', 3: '홀수', 4: '짝수', 5: '홀수', 6: '짝수', 7: '홀수', 8: '짝수', 9: '홀수'}

리스트와 딕셔너리 컴프리헨션의 비교

특징리스트 컴프리헨션딕셔너리 컴프리헨션

생성 결과 리스트 딕셔너리
기본 문법 [표현식 for 요소 in iterable] {키_표현식: 값_표현식 for 요소 in iterable}
조건문 사용 가능 가능 가능
활용 예 데이터 필터링, 변환, 리스트 생성 키-값 쌍의 매핑, 데이터 필터링

리스트와 딕셔너리 컴프리헨션 활용 팁

팁 1: 읽기 쉬운 코드 작성하기

  • 지나치게 복잡한 표현식은 피할 것. 복잡한 경우 별도의 함수로 분리하는 것이 좋음.
  • lambda를 활용하는 것도 하나의 방법.

팁 2: 중첩된 컴프리헨션 사용하기

  • 중첩된 반복문도 표현 가능.
# 2차원 리스트 펼치기
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened = [num for row in matrix for num in row]
print(flattened)
# 출력: [1, 2, 3, 4, 5, 6, 7, 8, 9]

팁 3: 성능 고려하기

  • 컴프리헨션은 간결하지만, 큰 데이터셋에서는 메모리 사용량과 성능을 고려해야 합니다.

결론

리스트 컴프리헨션과 딕셔너리 컴프리헨션은 Python에서 코드를 간결하고 효율적으로 작성할 수 있는 강력한 도구이다. 특히 데이터 처리, 필터링, 변환 작업에서 이 문법을 적극적으로 사용하면 코딩 속도와 가독성을 동시에 높일 수 있다.