개발
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
정리하면서도 굳이 이런게 왜필요한지... 도통 이해를 못하겠다.
문제내는 사람입장에서야 좋기야하겠다만...
문제
다음 파이썬 코드의 실행 결과를 고르시오. |
---|
|
① [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
개의 댓글
개발 카테고리의 다른 글
04/29
정처기 실기 단골문제, 파이썬 몫 나누기, 나머지 나누기 (/, //, %)
대부분의 프로그래밍 관련 문제에서 단골로 나오는 연산자가 바로 몫 나누기(/, 슬래쉬)와 나머지 나누기(%, 퍼센트)다.그 중 단골 연산자는 나머지 나누기(%)로 현업에서는 거의 쓰이지 않지만 프로그래밍 문제로는 정말 단골 연산자이다. 프로그래밍에서의 나누기대부분의 C, C++, Java등에서도 이 나머지 나누기는 예전...
04/29
파이썬 리스트 슬라이싱 [:], [::] 정리 (콜론, 더블콜론)
난 실무에 파이썬을 잘 이용하지는 않지만 정보처리기사를 준비하는도중 파이썬 관련 문법이 몇번 제법 나와서 알게된 사항이다. 개인적으로 공부도하고 정리도 할겸 포스팅을 남겨본다. 파이썬 리스트 슬라이싱리스트 슬라이싱(List Slicing)이라고 파이썬에서 리스트를 다룰때 사용하는 선택자 기법이 있다.우리가 흔히...

04/24
자바스크립트로 만드는 유저 조회수 카운터 기능
내 사이트 조회수는 469인데애드센스 조회수는 117... 뭐냐 이거! 사이트를 운영하는 입장에서 사이트의 활성도를 보는 가장 기본적인 척도는 바로 '조회수'이다.말그대로 조회수는 내 사이트의 특정 페이지의 조회가 얼마나 되었는지 보여주는 정량적 수치로 '방문자수'와 더불어 중요한 지표로 사용된다. 방문자수의 경우...