이 포스트에서는 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로 인식되기 때문.
'프로그래밍 문법 > Python 문법' 카테고리의 다른 글
숫자인 숫자, 문자인 숫자 (0) | 2024.03.07 |
---|---|
split()과 split("")의 차이점 (1) | 2024.03.07 |
리스트와 문자열은 동일한가?? (0) | 2023.03.06 |
헷갈리는 문법 정리 (2) - isdigit, Counter, if-else (0) | 2022.12.12 |
헷갈리는 문법 정리 (1) - end='', strip(), sys.stdin.readline() (0) | 2022.10.21 |