comprehension의 사전적 정의는 '이해력', '이해력 연습' 이라고 하는데 list comprehension은 의역하면 고급진 list 활용정도로 의역하면 좋을 것 같다. Comprehension이란 iterable한 오브젝트를 생성하기 위한 방법중 하나로 파이썬에서 사용할 수 있는 유용한 기능중 하나이다.
어떤 list를 만들려고 할 때 적어야하는 코드의 수를 줄여주고, 가독성도 좋아지는 효과가 있다.
예를 들면 1~10 까지의 원소를 가지는 list를 만든다고 하면 예전에는 아래와 같이 생성을 했을 것이다.
mylist = []
for i in range(1,11):
mylist.append(i)
#result
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
하지만 comprehension을 배우고 난 후에는 아래와 같이 쓸 수 있다.
mylist = [i for i in range(1,11)]
# result
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
조금 더 복잡하게 조건문을 넣어줄 수 도 있다.
위와 같이 1~10 범위의 정수 중 짝수만 2를 곱하여 list의 원소로 생성하는 예제이다.
mylist = [i*2 for i in range(1,11) if i % 2 == 0]
# result
[4, 8, 12, 16, 20]
set, dictionary, generator에도 응용할 수 있다.
myset = {i in range(1,11)}
# result
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
foods = ['chicken', 'pizza', 'sushi', 'rice']
scores = [90, 80, 95, 100]
mydict = {key: value for key, value in zip(foods, scores)}
# result
{'chicken': 90, 'pizza': 80, 'sushi': 95, 'rice': 100}
gen = (i for i in range(10,1,-1))
print(next(gen))
print(next(gen))
print(next(gen))
# result
10
9
8