본문 바로가기
  • 시 쓰는 개발자
프로그래밍 문법/Python 문법

list comprehension - list를 코드 한줄로 초기화하기

by poetDeveloper 2024. 3. 7.

이 포스트에서는 list comprehension의 아주 간단한 형태만 보여주는데, 조금 더 숙달이 된다면 [ 출력되는 형태 또는 식 for 변수 in range(범위) if ~~] 처럼 한줄로 더 세세한 내용을 담을 수도 있다. 밑줄친 부분들이 특이점인데, 출력되는 형태 자체(x*2이나 x+2 처럼)를 정해줄 수도 있고, 홀짝(if x%2==0)처럼 조건을 달아서 출력해줄 수도 있다.

 

1) 1차원 리스트 초기화 하기

 

 n개만큼 초기화 시켜놓고 시작하기

nums1 = [0 for i in range(10)]  list 0으로 10개 초기화

 

 직접 초기화 하기, 개수 제한 없음

nums2 = list(map(int, input().split()))  list에 원소들 하나씩 직접 입력해줌

 

 

2) 2차원 리스트 초기화 하기

 

 list comprehension 사용해서 2차원 리스트 초기화

 2차원 리스트를 초기화 할 때는 list comprehension이 강제된다!

arr = [ [0]*col for _ in range(row) ]

모든 값이 0 row*col 짜리 행렬로 초기화 할 수 있다.

(참고)

행렬이 복잡하다면 그냥 col짜리 row개라고 생각해도 좋다.

Ex) arr = [ [0]*3 for _ in range(5) ] 라고 하자. [0]*3이므로 3개짜리가 5개 있는 것이다.  0으로 초기화 된 5 3열인 2차원 행렬이다.

 

 list comprehension 없이 단순히 2차원 리스트 초기화

arr = [ [0]*3 ] * 3

이렇게 초기화 하면 마치 모든 열이 한몸처럼 움직이게 된다. 그래서 arr[1][1] = 10으로 값을 바꾼다면, 이는 [ [0, 10, 0], [0, 10, 0], [0, 10, 0] ] 과 같이 초기화 된다.

 각 행에 있는 원소 3개짜리 리스트가 모두 같은 객체에 대한 reference로 인식되기 때문.

 

list comprehension 없이 초기화 했을 경우의 대참사

 

'프로그래밍 문법 > Python 문법' 카테고리의 다른 글

2차원 리스트 정렬하기  (0) 2024.03.07
문자열 replace  (1) 2024.03.07
숫자인 숫자, 문자인 숫자  (0) 2024.03.07
split()과 split("")의 차이점  (1) 2024.03.07
리스트와 문자열은 동일한가??  (0) 2023.03.06