파이썬은 "리스트 함축(list comprehensions)" 또는 "리스트 컴프리헨션"이라는 개념을 지원합니다. comprehension은 함축, 포함, 내포라는 의미입니다.
리스트 함축은 수학자들이 집합을 정의하는 것과 유사합니다. 수학에서 제곱값의 집합은 {} 와 같이 정의됩니다.
즉 자연수에 속하는 x에 대하여 값들이 모여서 집합을 생성합니다.
파이썬에서 리스트를 수학과 유사하게 정의할 수 있습니다. 파이썬에는 다음과 같이 0부터 9까지의 자연수에 대하여 제곱값의 리스트를 정의할 수 있습니다.
S = [ x ** 2 for x in range(10) ]
위의 문장을 해석해보면 다음과 같습니다. "range(10)에 속하는 모든 정수에 대하여 을 계산하여 리스트를 생성한다".
결과적으로 다음과 같은 리스트가 됩니다.
S = [ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81 ]
리스트 함축은 다음과 같은 형식을 가집니다.
[ expression for i in old_list if filter(i) ]
위의 형식을 풀어쓴다면 다음과 같습니다.
new_list = []
for i in old_list:
if filter(i):
new_list.append(expression(i))
리스트 함축을 사용하면 아주 간결하게 리스트를 생성할 수 있다는 큰 장점이 있습니다.
앞의 제곱의 집합을 리스트 함축으로 표현한 예를 다시 분석하여 봅시다.
S = [ x ** 2 for x in range(10) ]
만약 리스트 함축을 사용하지 않는다면 다음과 같이 반복문을 사용해야 할 것입니다.
squares = []
for x in range(10):
squares.append(x ** 2)
위의 코드를 그림으로 나타내면 다음과 같습니다.

리스트 [3, 4, 5]의 모든 항목에 2를 곱해서 새로운 리스트를 생성하는 문장은 다음과 같습니다.
list1 = [3, 4, 5]
list2 = [x * 2 for x in list1]
print(list2)
<실행 결과>
[6, 8, 10]
리스트 함축에는 if를 사용하여 조건이 추가될 수 있습니다. 예를 들어 0 부터 9 사이의 정수 중에서 짝수의 집합을 리스트 함축으로 표현하면 다음과 같습니다.
M = [x for x in range(10) if x % 2 == 0]
print(M)
<실행 결과>
[0, 2, 4, 6, 8]
리스트 함축은 숫자에 대해서만 적용되는 것은 아니다. 어떤 자료형에 대해서도 리스트 함축을 적용할 수 있습니다.
단어를 저장하는 리스트를 가정합시다. 단어의 첫 글자만을 추출하여 리스트로 만드는 문장을 작성해봅시다.
list = ["커지는", "헐빗빗빗", "빨라지는데"]
items = [word[0] for word in list]
print(items)
<실행 결과>
['커', '헐', '빨']
추가적인 예로 문자열을 구성하는 단어를 추출하여 단어의 길이를 계산하고 이것을 모아서 새로운 리스트로 생성해봅시다.
word_list = '내가 그린 기린 그림은 잘 그린 기린 그림이고 니가 그린 기린 그림은 잘 못 그린 기린 그림이다.'.split()
result_list = [len(w) for w in word_list]
print(result_list)
<실행 결과>
[2, 2, 2, 3, 1, 2, 2, 4, 2, 2, 2, 3, 1, 1, 2, 2, 5]
리스트 함축은 2개의 집합의 상호곱 형태로도 표현할 수 있습니다. 예를 들어 색상의 집합과 자동차의 집합을 상호곱하여 새로운 리스트를 생성할 수 있습니다.
colors = ["white", "silver", "black"]
cars = ["bmw5", "sonata", "malibu", "sm6"]
colored_cars = [ (x, y) for x in colors for y in cars ]
print(colored_cars)
<실행 결과>
[('white', 'bmw5'), ('white', 'sonata'), ('white', 'malibu'), ('white', 'sm6'), ('silver', 'bmw5'), ('silver', 'sonata'), ('silver', 'malibu'), ('silver', 'sm6'), ('black', 'bmw5'), ('black', 'sonata'), ('black', 'malibu'), ('black', 'sm6')]
colors 리스트의 원소와 cars 리스트의 원소가 하나씩 짝지어져 튜플이 되고 이 튜플이 모여 리스트가 됩니다.
피타고라스의 정리를 만족하는 삼각형들을 리스트 함축을 이용하여 모두 찾아봅시다. 삼각형 한 변의 길이는 1부터 30 이하입니다.

<실행 결과>
[(3, 4, 5), (5, 12, 13), (6, 8, 10), (7, 24, 25), (8, 15, 17), (9, 12, 15), (10, 24, 26), (12, 16, 20), (15, 20, 25), (20, 21, 29)]