Python의 리스트 컴프리헨션(List Comprehension)Language/Python2023. 10. 23. 16:14
Table of Contents
리스트 컴프리헨션이란?
파이썬에서 리스트 컴프리헨션(List Comprehension)은 기존의 for문을 사용한 리스트 생성 방식을 간단하고 효율적으로 표현할 수 있도록 도와주는 구문입니다. 이를 사용하면 더 읽기 쉽고 간결한 코드를 작성할 수 있습니다.
기본 구문
리스트 컴프리헨션의 기본 문법은 다음과 같습니다:
[표현식 for 아이템 in 반복가능객체 if 조건식]
위 구조는 아래와 같이 일반적인 for문과 동일한 결과를 생성합니다:
결과_리스트 = []
for 아이템 in 반복가능객체:
if 조건식:
결과_리스트.append(표현식)
간단한 예시
다음은 1부터 10까지의 숫자 중 짝수를 담는 리스트를 생성하는 예제입니다.
for문을 사용한 방식
even_numbers = []
for number in range(1, 11):
if number % 2 == 0:
even_numbers.append(number)
print(even_numbers) # [2, 4, 6, 8, 10]
리스트 컴프리헨션을 사용한 방식
even_numbers = [number for number in range(1, 11) if number % 2 == 0]
print(even_numbers) # [2, 4, 6, 8, 10]
두 코드의 결과는 같지만, 리스트 컴프리헨션을 사용한 방식이 더 간결하고 읽기 쉽습니다.
실전 활용 예제
1. 문자열 처리
리스트 컴프리헨션을 활용하여 문자열 데이터를 변환할 수 있습니다.
문제: 이름 목록에서 길이가 4 이하인 이름만 소문자로 변환하기
names = ["Alice", "Bob", "Charlie", "David"]
short_names = [name.lower() for name in names if len(name) <= 4]
print(short_names) # ['bob']
2. 이중 for문과 리스트 컴프리헨션
리스트 컴프리헨션은 중첩된 for문도 지원합니다.
문제: 2단과 3단의 구구단 결과 생성
multiplication_table = [(x, y, x * y) for x in range(2, 4) for y in range(1, 10)]
print(multiplication_table)
# [(2, 1, 2), (2, 2, 4), ..., (3, 9, 27)]
3. 딕셔너리 컴프리헨션과 함께 사용
리스트 컴프리헨션과 유사하게 딕셔너리도 컴프리헨션으로 작성할 수 있습니다.
문제: 이름과 나이를 딕셔너리로 변환
names = ["Alice", "Bob", "Charlie"]
ages = [25, 30, 35]
name_to_age = {name: age for name, age in zip(names, ages)}
print(name_to_age) # {'Alice': 25, 'Bob': 30, 'Charlie': 35}
리스트 컴프리헨션의 장점과 단점
장점
- 간결함: 코드가 훨씬 짧고 명료해집니다.
- 성능: 일반적으로
for문보다 빠르게 실행됩니다. - 가독성: 데이터 변환과 필터링을 한눈에 이해할 수 있습니다.
단점
- 복잡성 증가: 너무 복잡한 로직을 담으면 오히려 가독성이 떨어질 수 있습니다.
- 디버깅 어려움: 리스트 컴프리헨션 내 에러를 찾기 어렵습니다.
고급 활용
조건문 여러 개 사용하기
문제: 1부터 20까지 숫자 중 3의 배수는 "Fizz", 5의 배수는 "Buzz", 두 조건을 만족하면 "FizzBuzz"로 변환
fizzbuzz = [
"FizzBuzz" if x % 3 == 0 and x % 5 == 0 else
"Fizz" if x % 3 == 0 else
"Buzz" if x % 5 == 0 else x
for x in range(1, 21)
]
print(fizzbuzz)
# [1, 2, 'Fizz', 4, 'Buzz', 'Fizz', 7, 8, 'Fizz', 'Buzz', 11, 'Fizz', 13, 14, 'FizzBuzz', 16, 17, 'Fizz', 19, 'Buzz']
리스트에서 중복 제거
문제: 숫자 리스트에서 중복을 제거하고 제곱 값으로 변환
numbers = [1, 2, 2, 3, 4, 4, 5]
unique_squares = [x**2 for x in set(numbers)]
print(unique_squares) # [1, 4, 9, 16, 25]
결론
리스트 컴프리헨션은 파이썬에서 강력하고 유용한 기능으로, 다양한 데이터 변환 작업을 간단히 처리할 수 있게 해줍니다. 하지만 복잡한 로직에는 적합하지 않으므로, 적절히 사용하여 가독성과 효율성을 모두 만족시키는 것이 중요합니다.

'Language > Python' 카테고리의 다른 글
| Python 객체지향 프로그래밍 (OOP) (0) | 2023.10.24 |
|---|---|
| Python 파일 입출력 (파일 열기, 읽기와 쓰기) (0) | 2023.10.24 |
| Python 딕셔너리(Dictionary)와 집합(Set) (0) | 2023.10.22 |
| Python 리스트(list)와 튜플(tuple) (0) | 2023.10.22 |
| Python 조건문과 반복문 (0) | 2023.10.21 |