서론
이번 포스팅에서는 리스트 컴프리핸션에 대해서 알아보고자 한다. 배열이면 배열이지 뒤에 컴프리핸션은 뭐냐? 할텐데, 리스트 컴프리핸션은 단순히 선언하는 것이 아니라 계산식, if문 등을 넣어서 새로운 리스트를 만드는 방법이다. 대표적으로 ㅇ가지가 있는데 거기에 대해서 설명하고자 한다.
1. 단순 리스트 컴프리헨션
단순 리스트 컴프리헨션은 arr = [ 표현식 for 변수 in <iteration>]이다. 표현식에는 식이나, 간단한 함수를 넣을 수 있다. 예를들어 arr= [int(input() for _ in range (5)] 가 있다. iteration만큼 input을 받아 리스트를 만드는 것이다. int(input()) 대신에 x**2 같은 함수를 넣을 수도 있다.
2. if문을 활용한 리스트 컴프리헨션
if문을 활용하는 리스트 컴프리헨션은 다음과 같이 표현한다. arr = [ 표현식(원하는 모양) for 변수 in <iteration> if 조건식]. 예시를 들면 arr = [x for x in range(8) if x%2 ==0]가 있다. 이는 x를 0부터 7까지 돌면서 if 문에 만족하는 x로 구성된 리스트를 만드는 것이다. output은 [0,2,4,6]이 되겠다.
3. 삼항 연산자 컴프리헨션
if, else 를 활용할수도 있다. 이건 2와 비슷하지만 if문의 위치가 다르기에 주의하여야 한다. arr = [<출력1> if <조건1> else <출력2> for <iteration>] 으로 쓴다. 이를 말로 표현하면 조건1이 참이면 출력1을 하고, 조건1이 참이 아니면 출력2를 넣어서 리스트를 만드는 것이다. else가 없는 if문은 [표현식 for iteration if 조건]
4. 중첩 리스트 컴프리헨션
중첩 for문을 활용해서 만들 수도 있다. 구조는 [표현식 for 변수1 in <iteration1> for 변수2 in <iteration2>] 이다. 예시를 들면 arr = [ x*y for x in range(2) for y in range(3)]이 있다. [] 안에 for 뒤에 있는 것을 표현하면 다음과 같다.
for x in range(2): # 첫 번째 반복문
for y in range(3): # 두 번째 반복문
arr.append(x * y)
위와 같이 하면 output은 1차원 배열이 되는데, 2차원 배열을 만드려면 다음과 같이 선언해야 된다. arr_2d = [[x*y for y in range(3)] for x in range(2)]. 보면 순서가 다른걸 알 수 있다. 왜냐하면 전자는 for문을 그대로 썼지만 후자는 리스트로 한 번 묶었기 때문에 뒤에 있는걸 먼저 실행하는 구조라 앞으로 온 것이다. arr_2d = [[x*y for y in range(3)] for x in range(2)]를 for문으로 풀어서 쓰면 다음과 같다.
arr_2d = []
for x in range(2): # 첫 번째 반복문
inner_list = [] # 내부 리스트를 생성
for y in range(3): # 두 번째 반복문
inner_list.append(x * y) # 계산된 값을 내부 리스트에 추가
arr_2d.append(inner_list) # 완성된 내부 리스트를 최종 리스트에 추가
이를 이용해서 0으로 초기화 하는건 코딩테스트에서도 많이 쓰인다. 0으로 n행 m열 2차원 행렬을 만드는 것인데 이를 구현하려면 다음과 같이 선언하면 된다. arr= [[0 for _ in range(m)] for _ in range(n)] 이 역시 m열을 먼저 구성하기 때문에 순서상 앞으로 온다. 위에 있는 2중 for 문 구조를 생각하면 이해하기 쉽다.
'IT, Computer' 카테고리의 다른 글
[백준] BOJ2566, 최댓값 (0) | 2025.01.14 |
---|---|
[백준] BOJ1316, 그룹 단어 체커 (0) | 2025.01.13 |
Retrieval Augmented Generation(RAG) 복습 (6) 사전을 사용해서 질문 바꾸기 (2) | 2024.12.05 |
카멜 포터블 휴대용 모니터 프리즘 CPM1610IQ 구매기 (2) (3) | 2024.12.01 |
카멜 포터블 휴대용 모니터 프리즘 CPM1610IQ 구매기 (1) (2) | 2024.11.25 |