[코딩도장] day11. 2차원 리스트
■ 들어가기
- 파이썬 코딩 도장 (남재윤/길벗). 을 공부하며 정리하는 블로그
▶ Unit23. 2차원 리스트 사용하기
- 23.1 2차원 리스트를 만들고 요소에 접근하기
- 23.2 반복문으로 2차원 리스트의 요소를 모두 출력하기
- 23.3 반복문으로 리스트 만들기
- 23.4 2차원 리스트의 할당과 복사 알아보기
>> 23.1 2차원 리스트를 만들고 요소에 접근하기 <<
- 2차원 리스트는 가로x세로 형태의 행(row), 열(coloumn)로 구성되어 있으며 인덱스 0부터 시작
- 2차원 리스트는 리스트 안에 리스트를 넣어서 생성
- 안쪽의 각 리스트는 ,(콤마) 로 구분
- 사용법 : 리스트 = [[값, 값], [값, 값], [값, 값]]
>>> a = [[10, 20], [30, 40], [50, 60]] >>> a [[10, 20], [30, 40], [50, 60]] >>> b = [[10, 20], [30, 40], [50, 60]] >>> b [[10, 20], [30, 40], [50, 60]] |
1. 2차원 리스트의 요소에 접근
- 접근 : 리스트[세로인덱스][가로인덱스]
- 값 할당 : 리스트[세로인덱스][가로인덱스] = 값
>>> a [[10, 20], [30, 40], [50, 60]] >>> a[0][0] 10 >>> a[0][1] 20 >>> a[2][0] 50 >>> a[0][1] = 1000 >>> >>> a[0][1] 1000 >>> a [[10, 1000], [30, 40], [50, 60]] |
[잠깐] 톱니형 리스트
- 위의 2차원 리스트는 가로x세로가 2x3로 가로 크기가 일정한 "사각형 리스트" 인 반면,
- 가로 크기가 불규칙한 "톱니형 리스트(jagged list)도 생성 가능!
>>> a = [[10, 20], [500, 600, 700], [9], [30, 40], [8], [800, 900, 1000, 2000]] >>> a [[10, 20], [500, 600, 700], [9], [30, 40], [8], [800, 900, 1000, 2000]] >>> a = [] >>> a.append([]) >>> a [[]] >>> a[0].append(10) >>> a [[10]] >>> a[0].append(20) >>> a [[10, 20]] >>> a.append([]) >>> a [[10, 20], []] >>> a[1].append(500) >>> a [[10, 20], [500]] >>> a[1].append(600) >>> a [[10, 20], [500, 600]] >>> a[1].append(700) >>> a [[10, 20], [500, 600, 700]] |
- 2차원 리스트 출력 시, 리스트의 사각형 구조 유지하도록 출력!
-> pprint모듈의 pprint 함수 사용~
>>> a [[10, 20], [500, 600, 700]] >>> from pprint import pprint >>> pprint(a, indent=4, width=20) [ [10, 20], [500, 600, 700]] |
>> 23.2 반복문으로 2차원 리스트의 요소를 모두 출력하기 <<
- 아래 방법은 모두 가로, 세로 크기가 동일한 "사각형 리스트" 인 경우만 가능
- 그렇지 않은 리스트에서 사용 시 '에러' 발생
1. for 반복문을 한 번만 사용하기
- 사용법
for 변수1, 변수2 in 리스트 :
코드
- in 앞의 변수는 2차원 리스트의 행(row)의 크기 (요소 개수)와 일치하여야 함!
>>> b = [[10, 20], [30, 40, 50, 60], [70], [80, 90, 100]] >>> b [[10, 20], [30, 40, 50, 60], [70], [80, 90, 100]] >>> for x, y, in b : print(x, y) 10 20 Traceback (most recent call last): File "<pyshell#448>", line 1, in <module> for x, y, in b : ValueError: too many values to unpack (expected 2) >>> for a, b, c, d, e in a : print(a, b, c, d, e) Traceback (most recent call last): File "<pyshell#451>", line 1, in <module> for a, b, c, d, e in a : ValueError: not enough values to unpack (expected 5, got 2) >>> for a, b, c, d in b : print(a, b, c, d) Traceback (most recent call last): File "<pyshell#454>", line 1, in <module> for a, b, c, d in b : ValueError: not enough values to unpack (expected 4, got 2) |
2. for 반복문을 두 번 사용하기
- 2차원 리스트에서 for 반복문을 두 번 사용하는 방법
- 사용법
for 변수1 in 리스트 : ①
for 변수2 in 변수1 : ②
코드
- ① 은 전체 2차원 리스트의 행(row)을 한 줄 씩 추출
- ② 는 ①에서 추출한row기준으로 요소를 하나 씩 추출
>>> a = [[10, 20], [30, 40], [50, 60]] >>> for i in a : for j in i : print(j, end=' ') print() 10 20 30 40 50 60 |
3. for와 range 사용하기
- 2차원 리스트의 요소를 인덱스로 접근하는 방법
(참고) 2차원 리스트의 길이를 len()으로 구하면 리스트의 모든 요소가 아닌 행의 길이(개수)가 구해짐
>>> a [[10, 20], [30, 40], [50, 60]] >>> len(a) # 2차원 리스트에서 행(row)의 개수 구함 (세로 크기) 3 >>> len(a[0]) # 2차원 리스트에서 열(column)의 개수 구함 (가로 크기) 2 |
(참고) 2차원 리스트의 요소 접근 시 리스트[세로인덱스][가로인덱스] 의 형식으로 접근
>>> a [[10, 20], [30, 40], [50, 60]] >>> for i in range(len(a)) : # 2차원 리스트에서 행(row)의 개수 구함 (세로 크기) for j in range(len(a[i])) : # 2차원 리스트에서 열(column)의 개수 구함 (가로 크기) print(a[i][j], end=' ') print() 10 20 30 40 50 60 |
4. while 반복문을 한 번 사용하기
- for 반복문 한 번 사용하기와 마찬가지로 2차원 리스트의 행(row)을 먼저 추출 후, 해당 행의 열(column)을 순차적으로 조회
- 단, 열의 값을 구할 때는 열의 개수만큼 변수를 지정하여 출력하므로 열의 개수가 고정된 경우만 가능
>>> a [[10, 20], [30, 40], [50, 60]] >>> i = 0 >>> while i < len(a) : # 2차원 리스트에서 행(row)의 값을 구함 (세로) x, y = a[i] # 2차원 리스트에서 열(column)의 값을 구함 (가로) print(x, y) i += 1 10 20 30 40 50 60 |
5. while 반복문을 두 번 사용하기
(참고) 2차원 리스트의 요소 접근 시 리스트[세로인덱스][가로인덱스] 의 형식으로 접근
>>> a [[10, 20], [30, 40], [50, 60]] >>> i = 0 >>> while i < len(a) : # 2차원 리스트에서 행(row)의 값을 구함 (세로) j = 0 while j < len(a[i]) : # 2차원 리스트에서 열(column)의 값을 구함 (가로) print(a[i][j], end=' ') j += 1 print() i += 1 10 20 30 40 50 60 |