파이썬의 컴프리헨션(comprehension)을 단순 반복문을 간결하게 작성해주는 코드라고 생각했었다. 하지만 이렇게 대치해서 보니 왜 작성 방법이 다른지 바로 이해할 수 있었다.
수학 조건 제시법
파이썬 코드
[x**2 for x in A if x % 2 == 0]아 이래서 코드가 이렇게 작성되는 거구나!
이런 관점에서 보기 시작하면 파이썬 컴프리헨션이 단순 압축이 아니라, 일반적인 반복문과 가리키는 방향이 다르다는 것을 알 수 있다.
x**2는 최종 리스트에 들어갈 값을 만드는 표현식이고, for x in A는 어떤 값들을 대상으로 할지 정하는 for 절, if x % 2 == 0은 그중 어떤 값을 사용할지 거르는 조건이다.
일반적인 반복문에서는 보통 실행 과정을 순서대로 작성한다.
result = []
for x in A:
if x % 2 == 0:
result.append(x**2)반면 컴프리헨션에서는 먼저 어떤 값을 결과에 넣을 것인지가 앞에 나온다.
[x**2 for x in A if x % 2 == 0]즉, 두 코드 모두 같은 리스트를 만들지만 표현의 초점은 다르다.
일반적인 반복문에서는 리스트를 만드는 과정을 순서대로 집행하는 데 초점을 맞추고, 컴프리헨션에서는 결과 리스트에 삽입될 값의 형태를 먼저 보여주는데 초점을 둔다.
수학에서 조건을 제시해 어떤 집합을 만들 것인지 표현하듯이, 파이썬의 컴프리헨션 역시 어떤 원소들로 새로운 컬렉션을 구성할 것인지 기술하는 표현식인 것이다.
물론 수학의 집합과 파이썬에서의 리스트가 완전히 같지는 않다.
여기서 중요한 건, 범위와 조건을 통해 집합을 구성한다는 사고방식을 프로그래밍의 컬렉션 생성에 적용한 것이다.