Python

[Python] List Comprehension

wookhyung 2021. 6. 8. 14:19
728x90

List Comprehension


Comprehension 이란 iterable한 오브젝트를 생성하기 위한 방법중 하나로 파이썬에서 사용할 수 있는 유용한 기능중 하나이며, 파이썬은 다음과 같이 4가지의 Comprehension 기능을 제공합니다.

 

  • List Comprehension
  • Set Comprehension
  • Dict Comprehension
  • Generator Expression

이 중 가장 많이 활용되는 List Comprehension에 대해서 알아보려고 합니다.

 

for문을 활용한 list comprehension


List Comprehension 은 리스트 안에서 for 문과 if 문을 이용하여 보다 편리하게 리스트를 작성하고 처리할 수 있게 해줄 수 있다. List Comprehension의 기본 구조는 다음과 같다.

 

[ 식 for 원소 in 리스트 if 문 ]

 

[i for i in range(5)]
[0, 1, 2, 3, 4]

List Comprehension과 for 문을 사용한 리스트 생성을 비교해보면, 

 

a = []
for i in range(5):
	a.append(i)

# 결과
a
[0, 1, 2, 3, 4]

for 문을 사용하면 3줄이나 작성해야 하지만,

 

[i+5 for i in range(5)]
[5, 6, 7, 8, 9]
[i*2 for i in range(5)]
[0, 2, 4, 6, 8]

 

List Comprehension은 단 한 줄이면 해결이 되므로 매우 편리하다는 장점이 있습니다.

 

+) [i for i in range(5)]의 결과가 [0,1,2,3,4]이므로i + 5를 하면 [5, 6, 7, 8, 9]가 됩니다.

마찬가지로 i * 2를 하면 [0, 2, 4, 6, 8]이 되는 것을 이해할 수 있습니다.

 

 

단일 if 문을 포함한 List Comprehension


List Comprehension 에 단일 if 문을 포함하고 싶다면, if 문은 for 문 뒤에 나오면 됩니다.

 

예를 들면,

[i for i in range(5) if i % 2 == 0]
[0, 2, 4]

[i for i in range(5) if i % 2 == 1]
[1, 3]

 

다음과 같이 작성하면 됩니다.

 

[i for i in range(5)]의 결과가 [0,1,2,3,4]이고 여기에 if i%2 == 0 조건이 추가된다면,

이는 2로 나눈 나머지가 0이면 해당 i를 리스트에 생성하고 결과적으로 [0,2,4]만 리스트에 나타납니다.

 

마찬가지로, [i for i in range(5)]의 결과가 [0,1,2,3,4]이고 여기에 if i%2 == 1 조건이 추가된다면,

이는 2로 나눈 나머지가 1이면 해당 i를 리스트에 생성하고 결과적으로 [1,3]만 리스트에 나타납니다.

 

 

if와 else문을 포함한 List Comprehension


if 문에 else를 추가하여 리스트를 생성할 수 있습니다.

 

만약에 [0,1,2,3,4] 중 짝수는 모두 리스트에 포함시키고 홀수일 경우에는 None을 리스트에 포함시키려고 한다면 아래와 같이 하면 됩니다.

[i if i % 2 == 0 else None for i in range(5) ]

[0, None, 2, None, 4]

else가 추가되는 경우에는 if~else문이 i와 for 사이에 위치하여야 한다는 점에 유의해야 합니다.

 

 

중첩 for문을 포함한 List Comprehension


for 문을 중첩하여 List Comprehension을 만들 수 있습니다.

1~5 사이의 숫자에 각각 7~9 숫자를 곱한 결과를 리스트에 나타내고 싶다면 아래와 같이 하면 됩니다.

[i*j for i in range(1,6) for j in range(7,10)]

[7, 8, 9, 14, 16, 18, 21, 24, 27, 28, 32, 36, 35, 40, 45]

for 문 뒤에 for 문을 계속 쓰는 경우 앞의 for 문의 원소에 대해서 그 다음 for 문의 원소를 순차적으로 적용한 결과가 리스트에 나타나게 된다.