algorithm/Structures

[Structures] List Comprehension과 any, all

ayeongjin 2025. 2. 1. 17:33

1️⃣ 기본 문법

[표현식 for 변수 in iterable]

# ex
numbers = [x for x in range(10)]
print(numbers) # ➝ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

 


2️⃣ 조건 추가 (if문)

[표현식 for 변수 in iterable if 조건]

 

예제: 짝수만 리스트에 추가

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

 

예제: 홀수는 제곱, 짝수는 제외

squares = [x**2 for x in range(10) if x % 2 != 0]
print(squares) # ➝ [1, 9, 25, 49, 81]
 

예제: 조건을 만족하면 다른 값으로 변환

result = [x if x % 2 == 0 else "홀수" for x in range(10)]
print(result) # ➝ [0, '홀수', 2, '홀수', 4, '홀수', 6, '홀수', 8, '홀수']
 

 

💡 if와 else를 같이 쓰려면 if 앞에 작성해야 함!

 

 


 

3️⃣ 중첩 반복문 (이중 for문)

[표현식 for 변수1 in iterable1 for 변수2 in iterable2]
 

 

예제: (x, y) 조합 만들기

pairs = [(x, y) for x in range(3) for y in range(2)]
print(pairs) # ➝ [(0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (2, 1)]
 

예제: 구구단 만들기 (2~3단)

gugudan = [f"{x} x {y} = {x*y}" for x in range(2, 4) for y in range(1, 10)]
print(gugudan)
 

예제: 2차원 리스트 펼치기 (flatten)

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flatten = [num for row in matrix for num in row] print(flatten) # ➝ [1, 2, 3, 4, 5, 6, 7, 8, 9]
 

 


 

4️⃣ 딕셔너리 & 세트 컴프리헨션

 

딕셔너리 컴프리헨션 (Dictionary Comprehension)

squares_dict = {x: x**2 for x in range(5)}
print(squares_dict) # ➝ {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
 

세트 컴프리헨션 (Set Comprehension)

unique_numbers = {x % 3 for x in range(10)}
print(unique_numbers) # ➝ {0, 1, 2}
 

 


 

5️⃣ 응용 예제

 

2차원 리스트(행렬) 전치 (Transpose)

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
transpose = [[row[i] for row in matrix] for i in range(3)]
print(transpose) # ➝ [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

 

리스트에서 중복 제거 & 정렬

nums = [3, 1, 2, 3, 2, 4, 1, 5]
unique_sorted = sorted({x for x in nums}) 
print(unique_sorted) # ➝ [1, 2, 3, 4, 5]
 

문자열 리스트를 길이로 변환

words = ["hello", "hi", "Python", "AI"]
word_lengths = {word: len(word) for word in words}
print(word_lengths) # ➝ {'hello': 5, 'hi': 2, 'Python': 6, 'AI': 2}
 

 


6️⃣ any() & all() 기본 개념

  • any(iterable): 하나라도 True면 True 반환
  • all(iterable): 모든 요소가 True여야 True 반환

 

예제

values = [True, False, True]
print(any(values)) # ➝ True (하나라도 True가 있음)
print(all(values)) # ➝ False (모두 True여야 True)
 

 


 

7️⃣ 리스트 컴프리헨션과 함께 사용

 

리스트에서 특정 조건을 만족하는 값이 있는지 (any)

numbers = [1, 3, 5, 7, 9]
has_even = any(x % 2 == 0 for x in numbers)
print(has_even) # ➝ False (짝수가 없음)
numbers = [2, 3, 5, 7]
has_even = any(x % 2 == 0 for x in numbers)
print(has_even) # ➝ True (2가 짝수라 True)

 

 

리스트의 모든 요소가 조건을 만족하는지 (all)
 
numbers = [2, 4, 6, 8, 10]
all_even = all(x % 2 == 0 for x in numbers)
print(all_even) # ➝ True (모두 짝수)
 
numbers = [2, 4, 6, 7, 10]
all_even = all(x % 2 == 0 for x in numbers)
print(all_even) # ➝ False (7이 홀수라 False)