이것저것 기록

[python] 조건부 표현식, 리스트 표현식, 축약 본문

코린이/코딩 기초 & 알고리즘 공부

[python] 조건부 표현식, 리스트 표현식, 축약

anweh 2020. 10. 26. 11:23

 

if문이나 for문을 사용할 때, 보통은

for i in range(len(list)): 
	blah

이렇게 쓰는게 일반적(?)이라고 생각했었다.

그런데 석사 동기가 (그때 당시 내가 느끼기엔) 매우 특이한 방식으로 조건명령어를 사용하는 것을 보고 상당히 신선한 충격을 받았었다. 

 

그 특이한 방식이란 조건부 표현식이었다. 

표현식이라는 것은 수학에서의 '수식'과 거의 같은 의미로 사용되는데, 이 표현식에서 가장 중요한 특징은 '평가된다'는 것이다.

표현식을 사용한 문법에는 몇가지 종류가 있다. (출처: soooprmx.com/archives/8771#more-8771)

 

 

 

  1. 리스트 축약 및 필터

    • [ 표현식1 for 변수 in 반복가능 if 표현식2]

    • '반복가능' 객체의 매 원소로부터 '표현식2'가 참일 때만 '표현식1'의 값으로 구성되는 새 리스트를 만든다.

  2. 2중 리스트 축약

    • [ 표현식(x, y) for x in 반복1 for y in 반복2 ]

    • 반복1, 반복2에 대해서 변수 x, y의 각각의 조합쌍으로부터 표현식의 결과를 리스트로 만든다

  3. 사전 축약 

    • { 표현식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)} 

 

 

 

Comments