Programming/Python

[코딩도장-파이썬] 2차원 리스트 사용하기 1

Supreme_YS 2020. 11. 20. 21:15

1. 2차원 리스트 생성하기

이전까지 사용했던 1차원 리스트가 아닌 2차원의 리스트를 생성하는 방법입니다. 

  • 리스트 = [[값, 값], [값, 값], [값, 값]]
a = [[10, 20], [30, 40], [50, 60]]
print(a)
[[10, 20], [30, 40], [50, 60]]

2. 2차원 리스트의 요소에 접근하기

2차원 리스트의 요소에 접근하거나 값을 할당할 때는 리스트 뒤에 [ ](대괄호)를 두 번 사용하며 [ ] 안에 세로(row) 인덱스와 가로(column) 인덱스를 지정해주면 됩니다.

  • 리스트[세로인덱스][가로인덱스]
  • 리스트[세로인덱스][가로인덱스] = 값
a = [[10, 20], [30, 40], [50, 60]]

print(a[0][0]) # 세로 인덱스 0, 가로 인덱스 0인 요소 출력

print(a[1][1]) # 세로 인덱스 1, 가로 인덱스 1인 요소 출력

print(a[2][1]) # 세로 인덱스 2, 가로 인덱스 0인 요소 출력

print(a[0][1]) # 세로 인덱스 0, 가로 인덱스 1인 요소 출력

a[0][1] = 1000 # 세로 인덱스 0, 가로 인덱스 1인 요소에 값 할당

print(a[0][1]) # 세로 인덱스 0, 가로 인덱스 1인 요소 출력
[[10, 20], [30, 40], [50, 60]]

10

40

60

20

1000

참고 1 | 2차원 리스트 [[10, 20], [30, 40], [50, 60]]은 가로 크기가 일정한 사각형 리스트입니다. 특히 파이썬에서는 가로 크기가 불규칙한 톱니형 리스트(jagged list)도 만들 수 있습니다.

a = []
a.append([])
a[0].append(10)
a[0].append(20)
a.append([])
a[1].append(500)
a[1].append(600)
a[1].append(700)
[[10, 20], [30, 40], [50, 60]]
10
40
60
20
1000
[[10, 20], [500, 600, 700]]
리스트 a는 가로 크기(행의 요소 개수) 가 제각각입니다. 이런 리스트는 요소가 배치된 모양이 톱니처럼 생겼다고 하여 톱니형 리스트라고 부릅니다.

참고 2 | 튜플 안에 튜플을 넣는 방식, 튜플 안에 리스트를 넣는 방식, 리스트 안에 튜플을 넣는 방식 등이 가능합니다.

  • 튜플 = ((값, 값), (값, 값), (값, 값))
  • 튜플 = ([값, 값], [값, 값], [값, 값])
  • 리스트 = [(값, 값), (값, 값), (값, 값)]
a = ((10, 20), (30, 40), (50, 60)) # 튜플 안에 튜플을 넣은 2차원 튜플

b = ([10, 20], [30, 40], [50, 60]) # 튜플 안에 리스트를 넣음

c = [(10, 20), (30, 40), (50, 60)] # 리스트 안에 튜플을 넣음

print(a, b, c, sep='\n')
((10, 20), (30, 40), (50, 60))
([10, 20], [30, 40], [50, 60])
[(10, 20), (30, 40), (50, 60)]
튜플은 내용을 변경할 수 없으므로 a는 안쪽과 바깥쪽 모두 요소를 변경할 수 없습니다. b는 안쪽 리스트만 요소를 변경할 수 있고, c는 바깥쪽 리스트만 요소를 변경할 수 있습니다.
a[0] = (500, 600)    # 바깥쪽 튜플은 변경할 수 없음. TypeError 발생

b[0][0] = 500        # 안쪽 리스트는 변경할 수 있음

b[0] = (500, 600)    # 바깥쪽 튜플은 변경할 수 없음. TypeError 발생

c[0][0] = 500        # 안쪽 튜플은 변경할 수 없음. TypeError 발생

c[0] = (500, 600)    # 바깥쪽 리스트는 변경할 수 있음

참고 3 | 사람이 알아보기 쉽게 출력하기

 

2차원 리스트를 출력하면 한 줄로 쭉 붙어서 출력됩니다. pprint 모듈의 pprint 함수를 사용해서 2차원 리스트의 사각형 구조를 유지할 수 있습니다.

from pprint import pprint
pprint(a, indent=4, width=20)
(   (10, 20),
    (30, 40),
    (50, 60))