파이썬으로 코딩테스트를 하다보면 코드 가독성을 위하여 다른 사람들의 숏코딩을 찾아보게 되는데 짧게 한 줄로 끝내는 문법들을 사용하는 사람들이 많다.
그 중 하나가 리스트 컴프리헨션이라는 문법인데 오늘은 이 문법에 대해서 알아볼 생각이다.
만약 1부터 n까지의 수를 리스트에 할당시켜야 할때 해당 문법을 몰랐을때는 아래와 같이 3줄에 걸쳐서 코드를 작성했었다.
n = []
n = int(input())
for i in range(1, n+1):
n.append(i)
하지만 리스트 컴프리헨션 문법을 사용하면 아래와 같이 한 줄로 작성을 할 수 있었다.
[i for i in range(1,int(input())+1)]
가독성 높고 깔끔한 코드를 짜고 싶어하는 나에게는 꼭 필요한 문법이였다.
그렇다면 해당 문법은 어떻게 구성 되어있는것일까?
궁금해서 파이썬 공식문서를 찾아보았다.
파이썬 공식문서(리스트 컴프리헨션)
더 검색해보니 리스트 컴프리헨션은 리스트에만 사용할 수있는 것이 아닌 다른 자료형(set, dict, tuple)에도 사용 가능하다고 한다!
리스트 컴프리헨션은 표현식과 그 뒤를 따르는 for 절과 if절들을 감싸는 대괄호로 구성이 되어있다.
정리해보면 구조는 for문을 돌고 나온 변수들을 활용한 값을 리스트로 최종 반환하는 형태이며 구조는 아래와 같이 구성되어 있다.
- [ 변수 활용 for 변수 in 순회할 값 ]
- [ 변수 활용 for 변수 in 순회할 값 if 조건식]
- [ 변수 활용 for 변수1 in 순회할 값 for 변수2 in 순회할 값]
- [ 변수 활용1 if 조건식 else 변수활용2 for 변수1 in 순회할 값]
1번은 변수활용, for문
#1번 구조를 활용했을때 예시는
#for 문을 돌고 나온 변수들에 2를 곱한 값을 반환하는 코드이다.
test = [i*2 for i in range(1,5+1)]
# 결과값) [2, 4, 6, 8, 10]
2번은 변수활용, for문, 조건식
#2번 구조를 활용했을때 예시는
#for 문을 돌고 나온 변수들에 5를 곱하고 짝수인 값들을 반환하는 코드이다.
test = [i*5 for i in range(1,5+1) if i %2 ==0]
# 결과값) [10, 20]
3번은 변수활용, for문, for문(중첩 for문)
#3번 구조를 활용했을때 예시는
#첫번째 for문 돌 때 변수 i에 for문 변수 j만큼
# 더하고 나온 값들을 반환하는 코드이다.
test = [i+j for i in range(3) for j in range(3)]
#결과값) [0, 1, 2, 1, 2, 3, 2, 3, 4]
4번은 변수활용, 조건문, for문으로 구성되어있다.
#4번 구조를 활용했을때 예시는
#for 문을 돌고 나온 변수가 짝수이면 10을 더하고
# 홀수인 값은 그대로 반환하는 코드이다.
test = [i+10 if i % 2 == 0 else i for i in range(1,5+1)]
#결과값) [1, 12, 3, 14, 5]
가독성 높고 깔끔한 코드를 짜고 싶어하는 나에게는 꼭 정리해보고 싶은 문법이였으며 앞으로도 계속 코드의 가독성을 높일 수 있는 방법에 대해 찾아보고 배울 것 이다.