-
[코딩도장] day11. 2차원 리스트IT/파이썬 2020. 8. 23. 01:22
■ 들어가기
- 파이썬 코딩 도장 (남재윤/길벗). 을 공부하며 정리하는 블로그
▶ 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 603. 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 604. 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 605. 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'IT > 파이썬' 카테고리의 다른 글
[코딩도장] day13. 문자열 응용하기(1/2) - 문자열 메서드(replace(), split(), join(), strip()) (0) 2020.08.27 [코딩도장] day12. 2차원 리스트 - 반복문으로 리스트 만들기 (0) 2020.08.24 [코딩도장] day10. 리스트 map, 튜플 (0) 2020.08.23 [코딩도장] day10. 리스트 할당/복사, 리스트 표현식 (0) 2020.08.22 [코딩도장] day10. 리스트 요소값 조작하기 - index(), count(), reverse(), sort(), sorted, clear() (0) 2020.08.22