개발

2025 정처기 실기에서 나온 파이썬 리스트 컴프리헨션 (리스트 for문 + if문 축약 생성)

2025 정처기 실기에서 나온 파이썬 리스트 컴프리헨션 (리스트 for문 + if문 축약 생성)
목차
정처기 실기 코딩 문제는 날이가면갈수록 난이도가 우주를 돌파하고있는것 같다.
매번 기존 기출문제를 상회하는 방식의 코드를 보여주면서 전공자든 비전공자든 헷갈리게 만드는 요소만 오지게 나오는것같다.

이번에 봣던 시험에서는 특정 리스트의 for문과 if문을 한줄로 축약해 표현하는 파이썬의 리스트 컴프리헨션(List Comprehension) 방식의 코드라인이 나왔다.

대충 느낌보고 이해는 가능해서 문제풀이는 되었지만 한번 내용정리는 필요할거 같았다.


리스트 컴프리헨션

위에서도 설명했듯이 파이썬의 경우는 여러가지 축약 구문을 제공하는데 얘내들은 for문과 if문까지 한줄로 축약하는 방법을 제공한다.

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

이게 맞나 싶은데, 이걸로 시험문제까지 나올정도니까 어쩌겠는가, 알아는 둬야지...

위의 방식처럼 맨앞블럭에는 출력표현식이 위치해있고 이어서 반복 요소, 객체, 조건등을 나열해서 사용한다.
쉽게 예제를 가지고 이어서 설명해보자.

numbers = [1, 2, 3, 4, 5, 6]

# 짝수만 추출
even_numbers = [num for num in numbers if num % 2 == 0]

print(even_numbers)  # 출력: [2, 4, 6]Copy

위 예제는 주어진 숫자 배열에서 짝수만 추출해 출력하는 코드이다.
추출하는 곳의 코드는 리스트 컴프리헨션으로 작성되어있다.

이 축약문의 절차는 아래와 같다.

1. numbers 리스트를 순회하면서
2. num % 2 == 0 조건을 만족하는 요소만
3. even_numbers 리스트에 추가한다.

만약에 위 코드를 고전방식으로 구현한다면 아래코드와 같을것이다.

numbers = [1, 2, 3, 4, 5, 6]

even_numbers = []

for num in numbers:
    if num % 2 == 0:
        even_numbers.append(num)

print(even_numbers)  # 출력: [2, 4, 6]Copy

상대적으로 긴 코드이긴한데...
글쎄, 난 잘모르겠다. 이 코드가 훨씬 가독성이 뛰어나고 직관적인거 같기때문이다.

결국 파이썬에선 리스트를 쉽게 만드는 [] 대괄호 안의 생성, 축약문을 컴프리헨션이라고 통칭하는것이다.


if-else 를 같이 쓰는 경우

이 축약문을 더욱 복잡하게 쓰는 방식이 else 구문까지 아래와 같이 작성하는것이다.

numbers = [1, 2, 3, 4, 5]

# 짝수면 그대로, 홀수면 -1로 저장
new_numbers = [num if num % 2 == 0 else -1 for num in numbers]

print(new_numbers)  # 출력: [-1, 2, -1, 4, -1]Copy

위 코드도 기존방식으로 적으면 아래와 같다.

numbers = [1, 2, 3, 4, 5]

new_numbers = []

for num in numbers:
    if num % 2 == 0:
        new_numbers.append(num)
    else:
        new_numbers.append(-1)

print(new_numbers)  # 출력: [-1, 2, -1, 4, -1]Copy

정리하면서도 굳이 이런게 왜필요한지... 도통 이해를 못하겠다.
문제내는 사람입장에서야 좋기야하겠다만...


문제

다음 파이썬 코드의 실행 결과를 고르시오.
numbers = [1, 2, 3, 4, 5, 6]

new_numbers = [num * 2 if num % 2 == 0 else -1 for num in numbers if num > 2]

print(new_numbers)Copy
① [4, 6, 8, 10, 12]
② [-1, 8, -1, 12]
③ [-1, 6, -1, 10, -1, 12]
④ [6, 8, 12]



해설

1. 먼저 if num > 2 조건부터 배열에 적용한다.
numbers = [1, 2, 3, 4, 5, 6] 중
3, 4, 5, 6 만 남음 (1과 2는 제외)
남은 리스트: [3, 4, 5, 6]

2. 남은 각각의 요소에 대해,
- 짝수면: num*2
- 홀수면: -1 저장
num조건결과
3홀수 (-1)-1
4짝수 (*2)8
5홀수 (-1)-1
6짝수 (*2)12

3. 최종 리스트: [-1, 8, -1, 12]
정답: ② [-1, 8, -1, 12]

#Python
0 개의 댓글
×