코린이/코딩 기초 & 알고리즘 공부
[python] 조건부 표현식, 리스트 표현식, 축약
anweh
2020. 10. 26. 11:23

if문이나 for문을 사용할 때, 보통은
for i in range(len(list)):
blah
이렇게 쓰는게 일반적(?)이라고 생각했었다.
그런데 석사 동기가 (그때 당시 내가 느끼기엔) 매우 특이한 방식으로 조건명령어를 사용하는 것을 보고 상당히 신선한 충격을 받았었다.
그 특이한 방식이란 조건부 표현식이었다.
표현식이라는 것은 수학에서의 '수식'과 거의 같은 의미로 사용되는데, 이 표현식에서 가장 중요한 특징은 '평가된다'는 것이다.
표현식을 사용한 문법에는 몇가지 종류가 있다. (출처: soooprmx.com/archives/8771#more-8771)
-
리스트 축약 및 필터
-
[ 표현식1 for 변수 in 반복가능 if 표현식2]
-
'반복가능' 객체의 매 원소로부터 '표현식2'가 참일 때만 '표현식1'의 값으로 구성되는 새 리스트를 만든다.
-
-
2중 리스트 축약
-
[ 표현식(x, y) for x in 반복1 for y in 반복2 ]
-
반복1, 반복2에 대해서 변수 x, y의 각각의 조합쌍으로부터 표현식의 결과를 리스트로 만든다
-
-
사전 축약
-
{ 표현식1:표현식2 for 변수 in 반복가능 if 표현식2 }
-
표현식1:표현식2를 키:값 쌍으로 하는 사전을 만든다. 이때 표현식 3으로 필터링 한다.
-
예제
1. 리스트 축약 및 필터
numbers = [2, 4, 5, 6, 1, 12, 14, 51, 53, 48, 20]
even = [i for i in numbers if i%2==0]
# result: even = [2, 4, 6, 12, 14, 48, 20]
2. 2중 리스트 축약
numbers1 = [2, 4, 5, 6, 1, 12, 14, 51, 53, 48, 20, 20, 40, 1]
numbers2 = [2, 40, 34, 1]
same = [x + y for x in numbers1 for y in numbers2 if x==y]
# result: same = [4, 2, 80, 2]
3. 사전 축약
dd = {i: i * i for i in range(9) if i % 2 == 0} # only even
d = {i: i * i for i in range(9)}