리스트(참고)

매일 공부(ML)·2022년 1월 12일
0

Python

목록 보기
30/38

참고 | 톱니형 리스트

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()
profile
성장을 도울 아카이빙 블로그

0개의 댓글