개발로그필름

[Python] List Comprehension 리스트 컴프리헨션 본문

IT/Python

[Python] List Comprehension 리스트 컴프리헨션

yuullog 2025. 3. 22. 23:07
728x90
반응형
SMALL

 

 

 

반응형

 

 

Python에서 리스트를 다룰 때, 짧고 간결하게 새로운 리스트를 만들 수 있는 방법이 있다

 

리스트 컴프리헨션이란?

  • 기존 리스트나 반복 가능한(iterable) 객체를 기반으로, 새로운 리스트를 간단한 문법으로 만드는 방법
  • 일반적인 for 반복문을 한 줄로 표현할 수 있게 도와준다

 

✅ 기본 문법

[표현식 for 요소 in 반복가능한객체]

🔁 기존 방식과 비교

# 기존 방식
result = []
for i in range(5):
    result.append(i * 2)
print(result)  # [0, 2, 4, 6, 8]

# 리스트 컴프리헨션
result = [i * 2 for i in range(5)]
print(result)  # [0, 2, 4, 6, 8]

두 코드 모두 같은 결과를 출력하지만, 리스트 컴프리헨션을 사용하면 더 짧고 직관적

 

 

 

2. 조건문 추가하기 (if문)

리스트 컴프리헨션에서는 if 조건을 사용해 특정 조건을 만족하는 값만 선택할 수 있다

✅ 문법

[표현식 for 요소 in 반복가능한객체 if 조건]

✅ 예제: 짝수만 리스트로 만들기

even_numbers = [x for x in range(10) if x % 2 == 0]
print(even_numbers)  # [0, 2, 4, 6, 8]

 

 

 

 

3. if-else 함께 쓰기

조건에 따라 다른 값을 넣고 싶을 때 if-else를 표현식 안에서 사용할 수 있다

✅ 문법

[값1 if 조건 else 값2 for 요소 in 반복가능한객체]

✅ 예제: 짝수는 그대로, 홀수는 -1로 변경

result = [x if x % 2 == 0 else -1 for x in range(5)]
print(result)  # [0, -1, 2, -1, 4]

 

 

 

 

4. 중첩 반복문도 가능

  • 리스트 컴프리헨션 안에 이중 for문도 쓸 수 있다
  • 2차원 리스트 만들 때 자주 사용된다

✅ 예제: 구구단 결과 만들기

gugudan = [f"{i} x {j} = {i*j}" for i in range(2, 4) for j in range(1, 4)]
print(gugudan)
# ['2 x 1 = 2', '2 x 2 = 4', '2 x 3 = 6', '3 x 1 = 3', '3 x 2 = 6', '3 x 3 = 9']

 

 

 

SMALL

 

 

 

5. 문자열에서 리스트 만들기

문자열을 하나씩 분리해서 리스트로 만들기

chars = [c for c in "hello"]
print(chars)  # ['h', 'e', 'l', 'l', 'o']

 

 

 

 

6. 리스트 컴프리헨션 vs map, filter

리스트 컴프리헨션은 map() filter() 함수와 유사하지만 더 읽기 쉽고 직관적

✅ map 예제 (제곱값)

# map 함수
result1 = list(map(lambda x: x**2, range(5)))

# 리스트 컴프리헨션
result2 = [x**2 for x in range(5)]

print(result1)  # [0, 1, 4, 9, 16]
print(result2)  # [0, 1, 4, 9, 16]

 

✅ filter 예제 (짝수만)

# filter 함수
result1 = list(filter(lambda x: x % 2 == 0, range(10)))

# 리스트 컴프리헨션
result2 = [x for x in range(10) if x % 2 == 0]

print(result1)  # [0, 2, 4, 6, 8]
print(result2)  # [0, 2, 4, 6, 8]

 

 

 

 

7. 실전 예제 모음

🧩 모든 문자열을 대문자로 바꾸기

words = ["apple", "banana", "cherry"]
upper_words = [word.upper() for word in words]
print(upper_words)  # ['APPLE', 'BANANA', 'CHERRY']

 

🧩 리스트에서 숫자만 골라내기

mixed = [1, "a", 2, "b", 3]
numbers = [x for x in mixed if type(x) == int]
print(numbers)  # [1, 2, 3]

 

🧩 2차원 리스트 펼치기 (flatten)

matrix = [[1, 2], [3, 4], [5, 6]]
flat = [num for row in matrix for num in row]
print(flat)  # [1, 2, 3, 4, 5, 6]

 

 

 

 

8. 정리: 리스트 컴프리헨션을 언제 쓰면 좋을까?

  • 리스트를 만들기 위한 for문이 너무 길 때
  • 간단한 조건이 포함된 리스트를 만들 때
  • 코드의 가독성을 높이고 싶을 때

단, 너무 복잡한 리스트 컴프리헨션은 오히려 가독성을 해칠 수 있으니 적절하게 사용하는 것이 중요

 

 

반응형
LIST
Comments