[Python] 2차원 리스트 사용하기

    리스트를 사용 할 때 한 줄로 늘어진 1차원 리스트라면, 리스트 2개를 사용한다면 2차원 리스트가 된다.

     

    쉽게 말하면 표의 행과 열의 구분이다.

     

    a = [[10, 20],[30, 40],[50, 60]]

    이는 3행 2열이다.

    그래서 a의 길이는 3이다. 

     

     

     

    이제 이를 for문을 통해 출력을 한다고 과정 했을 때

    a = [[10, 20], [30, 40], [50, 60]]
    print(a)
    for i in a:
        for j in i:
            print(j)

    2개의 리스트를 사용하기 때문에 2개의 for문이 필요하다.

     

     

    그러나 파이썬을 사용하므로 간략하게 쓰는 방법도 있다.

    a = [[10, 20], [30, 40], [50, 60]]
    for x, y in a:
    	print(x, y)

    이렇게 for문 하나로도 이차원 배열 또한 출력이 가능하다.

     

    이는 for문만 있지 않고 while에도 존재한다.

    a = [[1, 2],[3,4],[5,6]]
    
    i=0
    while i <len(a):
        x,y = a[i]
        print(x,y)
        i+=1

    while의 특성상 초기문과 증감문이 별도로 있어서 길어지긴 했지만 while또한 하나의 반복문으로

    이차원 배열을 출력이 가능하다.

     

     

    for문을 이용해서 비어있는 2차원 리스트를 만들어 보자.

    a = []
    
    for i in range(3):
        line = []
        for j in range(2):
            line.append(0)
        a.append(line)
    print(a)
    

    >>>[[0,0],[0,0],[0,0]]

     

    값이 들어 있는 리스트가 아니라 값이 비어있는 리스트가 생성되었다.  append를 통해 값을 추가하고

    1차원 for문의 append를 통해 값을 담은 리스트를 추가해서 만드는 방식이다.

    a의 입장에서는 [리스트, 리스트, 리스트] 이기 때문이다.

     

     

    리스트 표현식으로 2차원 리스트 만들기

    a = [[0 for j in range(2)] for i in range(3)]

    >>>[[0,0],[0,0],[0,0]]

     

    위의 리스트가 길게 느껴진다면 한 줄로도 설명이 가능하다. 이제 이는 파이썬에 능숙해졌다면 사용할 수 있는 기술이다.

     

     

    이제 이를 응용한다면.

    a = [[0]* i for i in [3, 1, 3, 2, 5]]

    >>>[[0,0,0,] , [0], [0,0,0], [0,0], [0,0,0,0,0]]

     

    가로의 길이(열)을 알고 있다는 가정에 한에서 그에 맞게 행의 열이 결정되는 리스트다.

    이처럼 파이썬을 응용할 수 있다면 코딩의 줄 길이가 점차 짧아짐을 느낄 수가 있다.

     

     

    이차원 리스트를 복사하기

    a = [[10, 20], [30, 40]]
    import copy
    b = copy.deepcopy(a)

    그냥 copy를 사용 할 경우 앞서 배운 것 처럼 a의 리스트를 copy를 할 수 있다.

    그러나 a값 안에 또 다른 리스트는 copy 대상에 되지 않고.

    만약 하지 않을 경우, b의 값을 변경해도 a의 값이 변경되는 상황이 발생한다.

     

    그래서 1차원이 아닌, 다중 배열을 사용하게 될 경우에는 copy.deepcopy를 사용해야한다.

    반응형

    'Language > Python' 카테고리의 다른 글

    [Python] 파일사용하기  (0) 2020.10.14
    [Python] 문자열 응용하기  (0) 2020.10.14
    [Python] 리스트 추가하기  (0) 2020.10.13
    [Python] if 사용하기  (0) 2020.10.13
    [Python] 딕셔너리 사용하기  (0) 2020.10.13

    댓글

    Designed by JB FACTORY