제가 공부하면서 햇갈리는 것들이나 용어를 정리해놓고 사전처럼 쓰려고 작성하는 글입니다. 혹시 잘못 기록한 내용이 있다면 지적 부탁드립니다.
리스트 컴프리헨션 list comprehension, 직역하면 리스트 조건제시법입니다. 리스트를 선언할 때 원소를 더 쉽게 지정하기 위한 방법입니다.
아래 예시 코드와 함께 주석을 작성했습니다.
areas = []
areas1 = []
areas2 = []
for i in range(1, 11): # i*i 대신 i**2 를 사용해도 됩니다.
areas = areas + [i*i]
areas1.append(i*i)
areas2.extend([i*i])
print('areas', areas)
print('areas1', areas1)
print('areas2', areas2)
실행결과
리스트에 원소를 추가하는 방법을 세가지 사용해봤고 결과는 똑같습니다.
반복문 안에 리스트에 원소를 추가하는 방식을 사용할 수도 있지만, 리스트 선언을 할때 조건제시법을 사용해서 더 간편하게 코드를 작성할 수도 있습니다. 이 조건을 수식으로 areas3 = { x^2 | 1 ≤ x <11, x ∈ Z } 이렇게 표현할 수도 있습니다.
areas3 = [i*i for i in range(1,11)]
print('areas3', areas3)
실행결과
areas4 는 areas1, 2, 3 와 같은 원소중에 짝수만을 포함할 수 있도록 나머지 연산을 하는 if 조건문을 추가했습니다. 조건제시법엔 중첩 for 문을 사용할 수도 있습니다. areas5 의 중첩 for 문을 areas6 에 조건제시법으로 똑같이 구현했습니다.
areas4 = [i*i for i in range(1,11) if i % 2 == 0]
print('areas4', areas4)
areas5=[]
for a in range(1,4):
for b in range(1,4):
areas5.append(a*b)
print('A',a,'B',b)
print('areas5', areas5)
areas6 = [x*y for x in range(1,4) for y in range(1,4)]
print('areas6', areas6)
실행결과
중첩 for 문이 조건 제시법으로 잘 구현된 것을 areas5 와 areas6의 원소가 같음을 통해 알 수 있습니다.
조건절은 반드시 for 문으로 시작해야 합니다. 그 뒤에 if 문을 사용할 수 있고 for-if 구조를 반복해서 사용할 수도 있지만 코드 가독성도 떨어지고 성능 또한 떨어질 수 있으니 조건이 복잡할 경우엔 조건제시법을 사용하지 않는 편이 더 좋을 수도 있습니다.