ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [파이썬] 리스트 초기화 (feat.2차원)
    Python 2020. 7. 25. 17:29
    반응형

    파이썬에서 리스트를 다루다 보면 리스트 크기나 값을 초기화시켜야 하는 경우가 생기죠

    초기화시키는 세 가지 방법과 이차원에서는 어떻게 하는지 봅시다

     

    첫 번째 방법입니다.

    #a = []
    a = list()
    for i in range(10):
        a.append(i)
    print(a)

    결괏값

    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

    리스트를 생성하는 방법은 a =[]나 a=list()나 같고 반복문으로 값을 넣어주었습니다. 다른 언어에서 익숙한 방식이죠

    a = list()
    for i in range(10):
        tmp = []
        for j in range(5):
            tmp.append(j)
        a.append(tmp)
    print(a)
    [[0, 1, 2, 3, 4],
    [0, 1, 2, 3, 4],
    [0, 1, 2, 3, 4],
    [0, 1, 2, 3, 4],
    [0, 1, 2, 3, 4],
    [0, 1, 2, 3, 4],
    [0, 1, 2, 3, 4],
    [0, 1, 2, 3, 4],
    [0, 1, 2, 3, 4],
    [0, 1, 2, 3, 4]]

    이차원 배열로 만드는 방법입니다. 고차원에서도 반복문만 중첩시켜주면 되죠. 

    하지만 파이썬에서는 잘 쓰지 않는 방식인 것 같습니다.

     

    두 번째 방법입니다.

    b = [0]*3
    print(b)
    [0, 0, 0]

    굉장히 간단하죠 하지만 하나의 값으로만 초기화가 가능합니다.

    b = [[0]*3]*3
    print(b)
    [[0, 0, 0],
    [0, 0, 0],
    [0, 0, 0]]

    이차원에서도 간단하죠. 한 줄로 만들 수 있죠. 그런데 문제가 있습니다.

    만약 b[1][1] 값만 변화시키면 어떻게 할까요?

    b = [[0]*3]*3
    b[1][1] = 1
    print(b)
    [[0, 1, 0],
    [0, 1, 0],
    [0, 1, 0]]

    분명 b[1][1]만 변화시켰는데 1열의 값이 모두 변화되었습니다.

    왜 그럴까요???

    이 방식은 리스트를 초기화시킬 때 모든 행이 같은 객체로 인식되기 때문입니다.

     

    그를 해결하기 위해세 번째 방법을 보죠

    c = [0 for _ in range(3)]
    print(c)
    [0, 0, 0]

    두 번째 방법보단 복잡하지만 간단합니다.

    이차원에선 어떨까요?

    c = [[0]*3 for _ in range(3)]
    c[1][1] = 1
    print(c)
    [[0, 0, 0],
    [0, 1, 0],
    [0, 0, 0]]

    생성도 잘되고 원하는 대로 값이 변화했네요

     

    주로 이 방식을 사용하니 익숙해지시길 바랍니다

    반응형

    댓글

Designed by Tistory.