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)