[Python] 2차원 리스트 사용하기
- Language/Python
- 2020. 10. 14.
리스트를 사용 할 때 한 줄로 늘어진 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 |