개발 공부

Python - List Comprehension

준군 2020. 12. 16. 23:27

본 글은 Python 공식문서를 참고 하였습니다.

 

List Comprehension 을 이용하면 매우 간결한 코드로 원하는 리스트를 만들수 있습니다.

 

아래의 코드는 for loop을 사용해 각 수의 제곱을 리스트에 저장합니다.

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

결과: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

 

List Comprehension을 이용하면 다음과 같이 간결한 코드를 쓸수 있습니다.

square = [i**2 for i in range(10)]

맨 먼저 저장 하고 싶은 값을 써주고 그에 이어서 for loop을 써줍니다.

 

이번에는 이중 for loop이 얼마나 간결하게 쓰여지는지 비교 해보겠습니다.

아래의 코드는 첫번째 배열 [1,2,3] 과 두번째 배열 [4,5,6] 을 조합하여 모든 combination을 찾는 방법입니다.

combination_list = []
for x in [1,2,3]:
  for y in [4,5,6]:
    combination_list.append((x,y))

결과: [(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)]

 

List Comprehension

combination_list = [(x,y) for x in [1,2,3] for y in [4,5,6]]

 

이번에는 조금 더 복잡한 Matrix Transpose 를 해보도록 하겠습니다.

Matrix Transpose 란 매트릭스 안의 각 열과 행을 교체 해주는 변형법 입니다.

예를 들면 [ [1,2], [3,4] ] 를 Transpose 하게 되면 [ [1,3], [2,4] ] 로 변하게 됩니다.

 

matrix = [[1,2,3], [4,5,6], [7,8,9]]
transpose = []
for column in range(len(matrix)):
  temp = []
  for row in matrix:
    temp.append(row[column])
  transpose.append(temp)

결과: [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

 

List Comprehension

matrix = [[1,2,3], [4,5,6], [7,8,9]]
transpose = [[row[i] for row in matrix] for i in range(3)]

 

 

이와 같이 List Comprehension을 잘 이용하면 코드가 간결해지고 가독성을 올릴 수 있습니다.