2. 반복문으로 2차원 리스트의 요소를 모두 출력하기
2-1. for 반복문을 한 번만 사용하기
- 2차원 리스트에 for를 사용하면 가로 한 줄씩 반복하게 되고, 전체 리스트를 기준으로 보면 안쪽 리스트가 통째로 반복된다.
>>> a = [[10, 20], [30, 40], [50, 60]] >>> for x, y in a: # 리스트의 가로 한 줄(안쪽 리스트)에서 요소 두 개를 꺼냄 ... print(x, y) ... 10 20 30 40 50 60
- 이때 'for x, y in a:' 와 같이 in 앞에 변수를 두 개 지정하면 가로 한 줄(안쪽 리스트)에서 요소 두 개를 꺼내온다.
- in 앞의 변수의 개수는 2차원 리스트에서 가로 크기(안쪽 리스트의 요소 개수)와 일치해야 한다.
- for 반복문을 한 번만 사용하는 방식은 2차원 리스트의 가로 크기가 크지 않을 때 유용하다.
for 반복문을 한 번만 사용할 때
2-2. for 반복문을 두 번 사용하기
- 'for i in a:' 는 전체 리스트에서 가로를 한 줄씩 꺼내오고(안쪽 리스트를 통째로 꺼내 옴), 다시 'for j in i:' 와 같이 가로 한 줄(안쪽 리스트) i 에서 요소를 하나씩 꺼내면 된다.
a = [[10, 20], [30, 40], [50, 60]] for i in a: # a에서 안쪽 리스트를 꺼냄 for j in i: # 안쪽 리스트에서 요소를 하나씩 꺼냄 print(j, end=' ') print() # 실행 결과 10 20 30 40 50 60
for 반복문을 두 번 사용할 때
2-3. for과 range 사용하기
- for ~ range에는 세로 크기와 가로 크기를 지정해서 2차원 리스트의 요소에 인덱스로 접근할 수 있다.
a = [[10, 20], [30, 40], [50, 60]] for i in range(len(a)): # 세로 크기 for j in range(len(a[i])): # 가로 크기 print(a[i][j], end=' ') print() # 실행 결과 10 20 30 40 50 60
- 이때 주의할 점은 len으로 2차원 리스트 a의 크기를 구하면 리스트 안에 들어있는 모든 요소의 개수가 아니라 안쪽 리스트의 개수(세로 크기)가 나온다는 것이다. 즉, len(a)는 6이 아니라 3이다.
- 또 len으로 안쪽 리스트 a[i]의 크기를 구해야 안쪽 리스트에 들어잇는 요소의 개수(가로 크기)가 나오므로 len(a[i])는 2이다.
for i in range(len(a)): # 세로 크기 for j in range(len(a[i])): # 가로 크기
- 'for i in range(len(a)):' 는 세로 크기 3만큼 반복하고, 'for i in range(len(a[i])):' 는 가로 크기 2만큼 반복한다.
- 요소에 접근할 때는 리스트[세로인덱스][가로인덱스] 형식으로 접근하기 때문에 세로 인덱스에 변수 i 를, 가로 인덱스에 변수 j 를 지정해준다.
print(a[i][j], end=' ')
2-4. while 반복문을 한 번 사용하기
- while 반복문을 사용할 때도 리스트의 크기를 활용하면 편리하다.
- 이때도 len(a) 처럼 2차원 리스트의 크기를 구했으므로 안쪽 리스트의 개수(세로 크기 : 3)가 나온다.a = [[10, 20], [30, 40], [50, 60]] i = 0 while i < len(a): # 반복할 때 리스트의 크기 활용(세로 크기) x, y = a[i] # 요소 두 개를 한꺼번에 가져오기 print(x, y) i += 1 # 인덱스를 1 증가시킴 # 실행 결과 10 20 30 40 50 60
- 리스트에 인덱스를 지정하여 값을 꺼내 올 때는 변수 두 개를 지정하여 가로 한 줄(안쪽 리스트)에서 요소 두 개를 한꺼번에 가져올 수 있다.
x, y = a[i]
- 요소를 가져온 후에는 반드시 i += 1 처럼 인덱스를 1씩 증가시켜줘야 한다.
2-5. while 반복문을 두 번 사용하기
- 먼저 'while i < len(a):' 와 같이 세로 크기만큼 반복하면서 'while j < len(a[i]):' 와 같이 가로 크기(안쪽 리스트의 요소 개수)만큼 반복하면 되고, 가로 크기는 len(a[i])와 같이 안쪽 리스트의 크기를 구하면 된다.
a = [[10, 20], [30, 40], [50, 60]] i = 0 while i < len(a): # 세로 크기 j = 0 while j < len(a[i]): # 가로 크기 print(a[i][j], end=' ') j += 1 # 가로 인덱스를 1 증가시킴 print() i += 1 # 세로 인덱스를 1 증가시킴 # 실행 결과 10 20 30 40 50 60
- 요소에 접근할 때는 리스트[세로인덱스][가로인덱스] 형식으로 접근하므로 세로 인덱스에 변수 i 를, 가로 인덱스에 변수 j 를 지정해준다.
print(a[i][j], end=' ')
- 요소를 가져온 후에는 반드시 j += 1 과 같이 가로 인덱스를 1 증가시켜야 한다.
- 마찬가지로 바깥쪽 while 에서는 i += 1 과 같이 세로 인덱스를 1 증가시켜 주는데, 이때 i += 1 을 안쪽 while 에서 수행하면 반복이 제대로 되지 않으므로 주의해야 한다.
i = 0 while i < len(a): j = 0 while j < len(a[i]): print(a[i][j], end=' ') j += 1 i += 1 # 안쪽 while에서 i를 증가시키면 안 됨. 잘못된 방법 i += 1 # 옳은 방법 print()
'Python 코딩도장' 카테고리의 다른 글
파이썬 코딩도장 Unit 23 정리(4) - 2차원 리스트의 할당과 복사 (0) | 2022.01.27 |
---|---|
파이썬 코딩도장 Unit 23 정리(3) - 반복문으로 리스트 생성 (0) | 2022.01.26 |
파이썬 코딩도장 Unit 23 정리(1) - 2차원 리스트 생성 후 요소에 접근하기 (0) | 2022.01.24 |
파이썬 코딩도장 Unit 22 정리(6) - 리스트에 map 사용, 튜플 응용 (0) | 2022.01.23 |
파이썬 코딩도장 Unit 22 정리(4) - 리스트 표현식 사용 (0) | 2022.01.21 |