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 문으로 작성하는 것이 나을 수도 있음
'코딩교육 > Python 초등교육에서 전문가까지' 카테고리의 다른 글
2단계 : 6. 텍스트 파일 열기 (open() 함수와 파일 모드) (0) | 2025.03.27 |
---|---|
2단계 : 5. 리스트와 반복문 (실습:도서관리시스템) (1) | 2025.03.26 |
2단계 : 5. 리스트와 반복문 (리스트와 반복문 - for 문을 활용한 리스트 순회) (0) | 2025.03.24 |
2단계 : 5. 리스트와 반복문 (리스트와 관련된 주요 메서드 - append(), remove(), sort() 등) (0) | 2025.03.23 |
2단계 : 5. 리스트와 반복문 (리스트의 기본 개념과 생성) (0) | 2025.03.22 |