Programing Language/Python

리스트 컴프리헨션과 삼항연산자을 이용하여 코드 작성하기

jheaon 2023. 6. 29. 04:48

 

파이썬 소스코드를 살펴보면 case = [i for i in range(1, 5)] 같이 리스트 안에 for 문을 사용하여 해당 요소를 구성하는 기법을 자주 볼 수 있다. 처음 보면 '왜 파이썬 코드에 영어 문법을 박아놨지?' 라고 생각할 수도 있는데 이는 파이썬에서 제공하는 문법의 종류 중 하나이다. 

 

이번에는 해당 방식의 이름과 이를 유연하게 사용하는 방법에 대해 알아보고자 한다. 

 

 

리스트 컴프리헨션

리스트 컴프리헨션(List Comprension)은 직관적으로 리스트를 생성하는 방법이다. 대괄호 []로 감싸고 내부에 for문과 if 문을 사용하여 조건에 만족하는 요소만 넣은 리스트를 생성할 수 있다.

 

리스트 컴프리헨션을 사용하는 이유는 아까 말했다시피 for 문이나 if 문 등의 코드를 여러 줄에 걸쳐 작성하는 수고를 덜어줄 뿐만 아니라 직관적으로 생성된 리스트를 파악할 수 있기 때문이다. 

 

아래는 리스트 컴프리헨션을 통해 리스트를 생성하는 과정이다. 

 

- code.py

# for, if 문을 적절하게 사용하여 생성
case = [i for i in range(5) if i % 2 == 0]

 

만약 if 문을 사용하는데 else을 통해 추가적인 조건을 넣어 리스트 컴프리헨션을 한다면 반드시 if 문의 위치는 for 문 왼쪽에 위치 하여야 한다. 가끔 이상하게 오른쪽에 if - else 문을 넣어도 실행된다고 알려주는 곳이 많은데 인터프리터로 직접 돌려보면 안 되는 것을 확인할 수 있다.

 

- code.py

# if-else 문을 사용한다면 for문 왼쪽에 작성
case = ["even" if i % 2 == 0 else 'odd' for i in range(5)]

 

추가적으로 조건이 더 붙는 다면, if - else 문을 여러 개 적어 처리할 수 있다. 

 

- code.py

case = [i if i % 2 == 0 else '홀수' if i < 10 else '홀수 중에 10 이상' for i in a]

 

만약 리스트 안에 넣는 값이 여러개가 있다면 튜플 형태로 () 묶은 뒤 for 문을 여러 개 작성하여 처리할 수 있다. 

 

- code.py

[(i,j) for i in range(2) for j in range(3)]

 

 

다양한 객체 자료형의 컴프리헨션

컴프리헨션은 리스트에만 사용되는 것이 아니라 set, dict 형 컬렉션 자료형에서도 사용이 가능하다. 아래는 set. dict에서 컴프리헨션을 사용하는 예제이다. 

 

- code.py

set = {i for i in range(3)}
dict = {a:b for a, b in zip(range(10), range(10))}

 

 

삼항연산자

삼항연산자란 세 개의 피 연산자를 필요로 하는 연산자를 의미한다. 주로 "조건" ? a : b처럼 식을 세운 뒤 조건이 참이면 a 거짓이면 b을 선택하는 형식으로 진행된다.

 

파이썬에서는 해당 연산자 처럼 ? : 구문을 사용하여 삼항연사자를 사용하지 않고, if - else문 조건을 통해서 삼항연산자 기능을 구현하기 때문에 블로그나 여러 글에서는 "파이썬에서는 삼항연산자가 없다"라고 말하기도 한다. 

 

다음은 python에서 삼항 연산자 기능을 구현하는 코드이다.

number = int(input("숫자를 입력하세요 : "))
print("even" if number % 2 == 0 else "odd") # if else 문을 통해 삼항연산자 기능을 처리한다.

 

'Programing Language/Python'의 다른글

  • 현재글 리스트 컴프리헨션과 삼항연산자을 이용하여 코드 작성하기

관련글