개발기록장

코딩 테스트에 필요한 기초 문법 (with 파이썬) - 리스트 컴프리헨션 본문

TIL/알고리즘 with 파이썬

코딩 테스트에 필요한 기초 문법 (with 파이썬) - 리스트 컴프리헨션

yangahh 2020. 10. 12. 18:05

 

리스트 컴프리헨션이란?

리스트 컴프리헨션은 리스트를 초기화하는 방법 중 하나로, 대괄호([ ]) 안에 조건문과 반복문을 넣는 방식으로 사용된다.

C++이나 Java에 비해 파이썬은 이 리스트 컴프리헨션으로 손쉽게 숏코딩을 할 수 있다.

 

 

 

예시 1 - 1차원 리스트 초기화

 

# 0부터 9까지 수를 갖는 리스트
a = [i for i in range(10)]

print(a)                 
# 결과 : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]



# 0부터 19까지 홀수만 포함하는 리스트 (조건문이 들어간 경우)
b = [i for i in range(20) if i % 2 == 1]  # 이 조건에 해당하는 i로만 리스트를 만들겠다는 의미  

print(b)                 
# 결과 : [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]

 

 

 

예시 2 - 2차원 리스트 초기화

 

리스트 컴프리헨션은 2차원 리스트를 초기화할 때 매우 효과적이다.

# N * M 배열의 2차원 리스트를 0으로 한 번에 초기화하기

a = [[0] * m for _ in range(n)]


# 3 * 4 배열의 2차원 리스트를 0으로 초기화하기

b = [[0] * 4 for _ in range(3)]


#### 출력1 ####
print(b)

# 결과 : [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]


#### 출력2 ####
for i in range(3):
  for j in range(4):
    print(b[i][j], end=" ")
  print()
  
# 결과 :
# 0 0 0 0 
# 0 0 0 0 
# 0 0 0 0

 

 

** 2차원 리스트 초기화 시 주의할 점

 

N * M 2차원 리스트 초기화 시

a = [[0] * m] * n

위 방식으로 리스트 초기화를 하면 잘못된 결과가 나온다.

[[0] * m] 이라는 리스트의 주소값을 n번 복제하게 되기 때문이다. 

즉, 리스트 안의 리스트가 모두 하나의 리스트를 가리키고 있다는 의미로 우리가 원하는 2차원 배열의 리스트로 만들어지지 않는다.