참고 | 톱니형 리스트
2차원 리스트 [[10, 20], [30, 40], [50, 60]]은 가로 크기가 일정한 사각형 리스트입니다. 특히 파이썬에서는 가로 크기가 불규칙한 톱니형 리스트(jagged list)도 만들 수 있습니다.
a = [[10, 20],
[500, 600, 700],
[9],
[30, 40],
[8],
[800, 900, 1000]]
리스트 a는 가로 크기(행의 요소 개수) 가 제각각입니다. 이런 리스트는 요소가 배치된 모양이 톱니처럼 생겼다고 하여 톱니형 리스트라고 부릅니다.
톱니형 리스트는 다음과 같이 append 메서드 등을 사용하여 동적으로 생성할 수도 있습니다.
>>> 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)
>>> a
[[10, 20], [500, 600, 700]]
ex2)
a = [3, 1, 3, 2, 5] # 가로 크기를 저장한 리스트
b = [] # 빈 리스트 생성
for i in a: # 가로 크기를 저장한 리스트로 반복
line = [] # 안쪽 리스트로 사용할 빈 리스트 생성
for j in range(i): # 리스트 a에 저장된 가로 크기만큼 반복
line.append(0)
b.append(line) # 리스트 b에 안쪽 리스트를 추가
print(b)
실행 결과
[[0, 0, 0], [0], [0, 0, 0], [0, 0], [0, 0, 0, 0, 0]]
ex2-1)
a = [[0] * i for i in [3, 1, 3, 2, 5]]
a
[[0, 0, 0], [0], [0, 0, 0], [0, 0], [0, 0, 0, 0, 0]]
2차원 리스트가 있으면 2차원 튜플도 있겠죠? 다음과 같이 튜플 안에 튜플을 넣는 방식, 튜플 안에 리스트를 넣는 방식, 리스트 안에 튜플을 넣는 방식 등이 가능합니다.
튜플 = ((값, 값), (값, 값), (값, 값))
튜플 = ([값, 값], [값, 값], [값, 값])
리스트 = [(값, 값), (값, 값), (값, 값)]
a = ((10, 20), (30, 40), (50, 60)) # 튜플 안에 튜플을 넣은 2차원 튜플
b = ([10, 20], [30, 40], [50, 60]) # 튜플 안에 리스트를 넣음
c = [(10, 20), (30, 40), (50, 60)] # 리스트 안에 튜플을 넣음
튜플은 내용을 변경할 수 없으므로 a는 안쪽과 바깥쪽 모두 요소를 변경할 수 없습니다. b는 안쪽 리스트만 요소를 변경할 수 있고, c는 바깥쪽 리스트만 요소를 변경할 수 있습니다.
a[0][0] = 500 # 안쪽 튜플은 변경할 수 없음. TypeError 발생
a[0] = (500, 600) # 바깥쪽 튜플은 변경할 수 없음. TypeError 발생
b[0][0] = 500 # 안쪽 리스트는 변경할 수 있음
b[0] = (500, 600) # 바깥쪽 튜플은 변경할 수 없음. TypeError 발생
c[0][0] = 500 # 안쪽 튜플은 변경할 수 없음. TypeError 발생
c[0] = (500, 600) # 바깥쪽 리스트는 변경할 수 있음
sorted로 2차원 리스트 정렬하기
2차원 리스트를 정렬할 때는 sorted 함수를 사용합니다.
sorted(반복가능한객체, key=정렬함수, reverse=True 또는 False)
다음은 학생 정보가 저장된 2차원 리스트를 정렬합니다.
students = [
['john', 'C', 19],
['maria', 'A', 25],
['andrew', 'B', 7]
]
print(sorted(students, key=lambda student: student[1])) # 안쪽 리스트의 인덱스 1을 기준으로 정렬
print(sorted(students, key=lambda student: student[2])) # 안쪽 리스트의 인덱스 2를 기준으로 정렬
실행 결과
[['maria', 'A', 25], ['andrew', 'B', 7], ['john', 'C', 19]]
[['andrew', 'B', 7], ['john', 'C', 19], ['maria', 'A', 25]]
sorted의 key에 정렬 함수를 지정하여
안쪽 리스트의 요소를 기준으로 정렬했습니다
student[1]은 안쪽 리스트의 인덱스 1을 뜻하며
'A', 'B', 'C' 순으로 정렬합니다.
마찬가지로 student[2]는 안쪽 리스트의 인덱스 2를 뜻하며
7, 19, 25 순으로 정렬합니다.
a = [[[0 for col in range(3)] for row in range(4)] for depth in range(2)]
print(a)
x=[]
for depth in range(2):
y=[]
for col in range(4):
z=[]
y.append(z)
for row in range(3):
z.append(0)
print(x)
col, row = map(int,input().split())
matrix = []
for i in range(row):
matrix.append(list(input()))
for i in range(row):
for j in range(col):
if matrix[i][j] =='*':
continue
else:
matrix[i][j] = 0
for a in range(i-1, i+2):
for b in range(j-1, j+2):
if a < 0 or b < 0 or a>= row or b>= col:
continue
elif matrix[a][b]=='*':
matrix[i][j] +=1
for i in range(row):
for j in range(col):
print(matrix[i][j], end= '')
print()