-
[파이썬] 리스트 초기화 (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]]
생성도 잘되고 원하는 대로 값이 변화했네요
주로 이 방식을 사용하니 익숙해지시길 바랍니다
반응형'Python' 카테고리의 다른 글
[파이썬] VsCode 모듈 import 에러, 문제 (2) 2020.08.29 [파이썬] heapq 사용법 (우선순위 큐, 힙) (0) 2020.08.10 [파이썬] set에 대하여(리스트와 시간비교) (0) 2020.08.07 [파이썬] 리스트 정렬(크기순, 길이순) (0) 2020.08.07 [파이썬] 특정 문자열이 포함되는지 확인하는법. (0) 2020.08.07