본문 바로가기
Python 코딩도장

파이썬 코딩도장 Unit 23 정리(2) - 2차원 리스트에서의 반복문 사용

by chanfficial 2022. 1. 25.

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 반복문을 사용할 때도 리스트의 크기를 활용하면 편리하다.
    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​
    - 이때도 len(a) 처럼 2차원 리스트의 크기를 구했으므로 안쪽 리스트의 개수(세로 크기 : 3)가 나온다.
  • 리스트에 인덱스를 지정하여 값을 꺼내 올 때는 변수 두 개를 지정하여 가로 한 줄(안쪽 리스트)에서 요소 두 개를 한꺼번에 가져올 수 있다.
    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()​