ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 파이썬_Unit23_2차원_3차원_list만들기
    python파2썬 2021. 8. 26. 18:09

    코딩도장_Unit23_2차원_3차원_list만들기

    파이썬

     

    #2차원 리스트 만들기.

    #2차원 리스트 만들기
    a = [[10, 20],[30, 40],[50, 60]]
    print(a)
    
    #2차원 리스트 요소에 접근하기
    print(a[0][0]) #세로인덱스0, 가로인덱스0 요소 출력
    a[0][1]=1000 #세로인덱스0 가로인덱스1 요소에 값 할당.
    print(a)
    
    x = ((10, 20), (30, 40), (50, 60))    # 튜플 안에 튜플을 넣은 2차원 튜플
    y = ([10, 20], [30, 40], [50, 60])    # 튜플 안에 리스트를 넣음
    z = [(10, 20), (30, 40), (50, 60)]    # 리스트 안에 튜플을 넣음
    print(x)
    print(y)
    print(z)
    
    #반복문으로 2차원 요소 출력하기.
    b = [[10,20], [30,40], [50,60]]
    for b1, b2 in b: #리스트의 가로 한 줄(안쪽 리스트)에서 요소 두개를 꺼냄
        print(b1,b2)
    print()
    
    #반복문 두번 사용해서 2차원 리스트 요소 출력
    for i in b: # b안쪽 리스트를 꺼냅니다.
        for j in i: #안쪽 리스트에서 요소를 하나씩 꺼냅니다.
            print(j)
    print()
    
    for k in range(len(b)): #세로크기
        for r in range(len(b[k])): #가로크기
            print(b[k][r])
    
    #while을 통해서 한번에 사용하기
    q = 0
    while q < len(b): #반복할 리스트 크기 활용
        n,m = b[q]    #요소 두개 한꺼번에 가져오기
        print(n,m)
        q+=1          #인덱스 1증가.
    
    #while문 두번 사용하기
    q1 = 0
    while q1< len(b):          #세로 크기
        q2 = 0
        while q2 < len(b[q1]): #가로 크기
            print(b[q1][q2])
            q2 += 1         #가로 인덱스 1증가
        print()
        q1 += 1             #세로 인덱스 1증가

     

     

    #반복문으로 리스트 생성 및 정렬

    # for 반복문 1차원 리스트 만들기
    a = [] #빈리스트 생성
    for i in range(10): #0~9까지 인덱스에 0추가
        a.append(0) #append 요소 추가
    print(a)
    
    #반복문으로 2차원 리스트 만들기
    b = [] #빈리스트 생성
    for n in range(3): #안쪽에 생성할 리스트 크기설정
        line = []
        for m in range(2): #안쪽리스트 요소 갯수
            line.append(0) #안쪽에 0 추가
        b.append(line)     #전체 리스트에 안쪽 리스트 추가
    print(b)
    
    #2차원 톱니 만들기
    x = [3,1,3,2,5]
    y = []
    
    for i in x:
        line = []
        for j in range(i): #리스트 저장된 가로 크기만큼 반복
            line.append(0)
        y.append(line)
    print(y) 
    
    #위의 코드를 간단하게 표현하기.
    c = [[0]*i for i in [3,1,3,2,5]]
    print(c)
    
    
    #sorted로 2차원 리스트 정렬하기.
    #문법 : sorted(반복가능한객체, key=정렬함수, reverse=True 또는 False)
    students = [
        ['john', 'C', 19],
        ['maria', 'A', 25],
        ['andrew', 'B', 7]
    ]
    
    print(sorted(students, key=lambda student: student[1]))
    #안쪽 리스트 인덱스 1을 기준으로 정렬 -> 가운데 'A' 'B' 'C'
    
    print(sorted(students , key=lambda student: student[2]))
    #안쪽 리스트 인덱스 2를 기준으로 정렬 -> 마지막 숫자 순서대로


    #리스트 복사, 할당 / deepcopy 와 copy 차이알기

    #리스트 할당과 복사
    a = [[10,20],[30,40],[50,60]]
    b = a
    b[0][0] = 500 #리스트 할당은 변수에 할당하고 변경해보면 모두 반영됩니다.
    print(a)
    print(b)
    
    print()
    
    #2차원 리스트는 copy메서드로 복사해도 모두 반영됩니다.
    #하지만 copy.deepcopy 함수를 사용하여 깊은 복사를 하면 하나의 리스트에만 적용됩니다.
    x = [[10,20],[30,40],[50,60]]
    import copy
    y = copy.deepcopy(x) #deepcopy는 좀 신기하네요.
    y[0][0] = 500
    print(x)
    print(y)
    
    #연습문제 23.6
    z = [[[0 for i in range(3)] for j in range(4)] for k in range(2)]
    print(z)
    #(가로 *세로) * 높이
    #리스트 = [[[값, 값], [값, 값]], [[값, 값], [값, 값]], [[값, 값], [값, 값]]]
    #리스트[높이인덱스][세로인덱스][가로인덱스]
    #리스트[높이인덱스][세로인덱스][가로인덱스] = 값

     

    심사문제23.7

    #심사문제 23.7
    row, col = 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 y in range(i-1, i+2): #한 칸 위부터 한 칸 아래까지 반복
                    for x in range(j-1, j+2): #한 칸 앞(왼)부터 한 칸 뒤(오른)까지 반복
                        if y<0 or x<0 or y>=row or x >=col:
                            continue
                        elif matrix[y][x] == '*':
                            matrix[i][j] += 1
    for i in range(row):
        for j in range(col):
            print(matrix[i][j], end='')
        print()

    결과

    5 5  -> 입력
    ..*..
    ...*.
    .*...
    .***.
    *.*..

     

     

    01*21 -> 출력결과
    2*532
    3***1
    *4*31

    댓글

Designed by Tistory.