List Comprehension

list comprehension은 Python에서 배열을 보다 간편하게 만드는 방법 중 하나이다.

아래와 같은 방식으로 배열을 생성하는 코드가 있다고 하자.

result = []  
for i in range(10):  
    result.append(i ** 2)

result # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]  

보통 이렇게 빈 배열에 원소를 하나씩 append하는 형태라면 list comprehension 꼴로 바꿀 수 있다. 그리고 이런 경우에 list comprehension 꼴로 바꾼 것이 더욱 직관적이다.

일반적인 list comprehension의 형태는

[(표현식) for (배열의 원소) in (배열)]

배열의 원소가 배열에서 하나씩 뽑아져 나오고, 그 원소가 표현식에 맞게 변형되어 새로운 배열의 원소로 하나씩 추가된다. 우리가 흔히 쓰는 for 문과 순서가 바뀌어져 있어 다소 헷갈릴 수 있다.

아까 만들었던 배열을 list comprehension으로 똑같이 만들어보면,

[i ** 2 for i in range(10)] # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] 

코드의 양이 단 한 줄로 줄어들었고, 이 배열에 대한 정보도 보다 직관적으로 알 수 있다. 여기서 i ** 2가 표현식인데, for 문을 돌 때마다 i의 값이 순서대로 들어가게 된다.

아래처럼 for 문 뒤에 조건문을 추가하여 원하는 원소를 필터링하여 배열에 넣을 수도 있다.

[i for i in range(10) if i > 5] # [6, 7, 8, 9, 10]
[i + 1 for i in range(1,100) if i % 2 == 0] # [3, 5, 7, ... , 99]