본문 바로가기
코딩교육/Python 초등교육에서 전문가까지

2단계 : 5. 리스트와 반복문 (리스트 컴프리헨션의 소개 - 기본 활용법)

by 제리토리 2025. 3. 25.
728x90
반응형

 

1. 리스트 컴프리헨션이란 ?

 

Python의 리스트 컴프리헨션(List Comprehension)리스트를 간결하고 효율적으로 생성하는 방법입니다.

기존의 for 문을 활용한 리스트 생성 방식보다 더 빠르고 직관적인 코드 작성이 가능합니다.

 

리스트 컴프리헨션의 주요 장점

  • 코드가 간결하고 가독성이 높음

  • 빠른 실행 속도 (for 문보다 성능이 향상됨)

  • 함수형 프로그래밍 스타일을 지원

  • 필터링과 변환을 쉽게 적용 가능

 

 

2. 리스트 컴프리헨션 기본 문법

 

㉮ 기본 구조

[표현식 for 변수 in 반복가능한객체]

 

  ✅ 기존의 for 문을 활용한 리스트 생성 방식과 비교

 

일반적인 for 문을 사용한 리스트 생성

numbers = []
for i in range(1, 6):
    numbers.append(i)
print(numbers)  # [1, 2, 3, 4, 5]

 

리스트 컴프리헨션을 사용한 코드

numbers = [i for i in range(1, 6)]
print(numbers)  # [1, 2, 3, 4, 5]

 

  ✅ for 문을 한 줄로 줄여 가독성을 향상시킴.

 

 

 

3. 리스트 컴프리헨션의 다양한 활용법

 

㉮ 리스트 요소 변환

 

리스트 컴프리헨션을 사용하면 리스트의 각 요소를 변환하여 새로운 리스트를 생성할 수 있음.

numbers = [1, 2, 3, 4, 5]
squared_numbers = [x**2 for x in numbers]

print(squared_numbers)  # [1, 4, 9, 16, 25]

 

  ✅ 각 요소를 제곱하여 새로운 리스트를 생성.

 

 

㉯ 리스트에서 특정 조건을 만족하는 요소만 선택 (필터링)

 

리스트 컴프리헨션은 조건문을 포함하여 특정 조건을 만족하는 요소만 선택 가능.

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = [x for x in numbers if x % 2 == 0]

print(even_numbers)  # [2, 4, 6, 8, 10]

 

  ✅ if 조건을 추가하여 짝수만 필터링 가능.

 

 

㉰ 리스트의 요소를 변환하며 필터링

 

조건을 포함하면서 변환된 값을 저장하는 리스트를 생성할 수도 있음.

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
squared_even_numbers = [x**2 for x in numbers if x % 2 == 0]

print(squared_even_numbers)  # [4, 16, 36, 64, 100]

 

  ✅ 짝수만 골라서 제곱한 값을 새로운 리스트로 생성.

 

 

㉱ 중첩 for 문을 사용하는 리스트 컴프리헨션

 

리스트 컴프리헨션은 중첩된 반복문도 한 줄로 표현 가능.

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flatten_list = [num for row in matrix for num in row]

print(flatten_list)  # [1, 2, 3, 4, 5, 6, 7, 8, 9]

 

  ✅ 이중 리스트(2차원 배열)를 1차원 리스트로 변환하는 데 유용.

 

 

 

4. 리스트 컴프리헨션과 map(), filter() 비교

 

㉮ map()을 이용한 변환

numbers = [1, 2, 3, 4, 5]
squared_numbers = list(map(lambda x: x**2, numbers))

print(squared_numbers)  # [1, 4, 9, 16, 25]

 

  ✅ 동일한 작업을 리스트 컴프리헨션으로 변환

squared_numbers = [x**2 for x in numbers]

 

 

㉯ filter()를 이용한 필터링

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))

print(even_numbers)  # [2, 4, 6, 8, 10]

 

  ✅ 동일한 작업을 리스트 컴프리헨션으로 변환

even_numbers = [x for x in numbers if x % 2 == 0]

 

  ✅ map()과 filter()보다 리스트 컴프리헨션이 더 직관적이고 가독성이 뛰어남.

 

 

5. 리스트 컴프리헨션의 성능 비교

 

리스트 컴프리헨션은 일반적인 for 문보다 실행 속도가 빠릅니다.

import time

numbers = list(range(1, 1000000))

# 일반적인 for 문
start = time.time()
squared_numbers = []
for num in numbers:
    squared_numbers.append(num**2)
end = time.time()
print(f"for 문 실행 시간: {end - start:.5f}초")

# 리스트 컴프리헨션
start = time.time()
squared_numbers = [num**2 for num in numbers]
end = time.time()
print(f"리스트 컴프리헨션 실행 시간: {end - start:.5f}초")

 

 

 

6. 리스트 컴프리헨션 사용 시 주의할 점

 

너무 복잡한 로직을 한 줄에 작성하지 말 것

❌ 안 좋은 예 (가독성이 낮음)

words = ["Python", "is", "awesome"]
lengths = [len(word) for word in words if word != "is" if len(word) > 2]

 

✅ 좋은 예 (가독성 높임)

words = ["Python", "is", "awesome"]
lengths = [len(word) for word in words if word != "is" and len(word) > 2]

 

  ✅ 가독성이 낮아지는 경우에는 for 문을 사용하는 것이 더 좋음.

 

 

7. 요약

 

리스트 컴프리헨션의 장점

  • 코드를 간결하게 작성 가능 (for 문보다 직관적)

  • 조건문을 포함하여 필터링 가능

  • 중첩 for 문도 간결하게 표현 가능

  • map(), filter()보다 가독성이 뛰어남

 

사용 시 주의할 점

  • 너무 복잡한 논리를 한 줄로 작성하지 말 것

  • 읽기 어려운 리스트 컴프리헨션은 일반 for 문으로 작성하는 것이 나을 수도 있음

728x90
반응형