ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [코딩도장] 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 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 

    댓글

Designed by Tistory.