일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 파이토치
- Semantic Segmentation
- Self-supervised
- Ai
- 딥러닝
- Computer Vision
- 인공지능
- 코딩테스트
- 코드구현
- optimizer
- transformer
- Convolution
- 알고리즘
- 프로그래머스
- 옵티마이저
- 머신러닝
- Paper Review
- Segmentation
- 파이썬
- ViT
- pytorch
- Python
- 논문 리뷰
- opencv
- programmers
- cnn
- 논문리뷰
- 논문구현
- object detection
- 논문
- Today
- Total
Attention please
리스트와 노드 본문
리스트
리스트란
순서가 있는 데이터를 나열한 자료구조를 의미합니다.
a = [1,3,5]
b = ['a', 'b', 'c']
위 코드처럼 int, float, str등 여러 자료형의 데이터들을
순서에 맞게 나열한 후 변수에 저장시킬 수 있습니다.
노드
노드란
연결리스트를 구성하는 각각의 원소들을 의미합니다.
뒤에서 배울 연결리스트가 바로 이 노드들의 연결로 인해 구성됩니다.
노드는 DATA와 포인터를 가집니다.
포인터는 노드와 노드를 연결하는 방향이라고 생각하면 됩니다.
이와 같이 노드는 개개인의 데이터를 가지며
또 노드끼리 연결될 때 방향을 가지고 있습니다.
타입 힌트
잠시 타입 힌트에 대해 설명하겠습니다.
위의 노드는 클래스로 구성되는데
여러 클래스들을 구성하고 또 연결할 때
어떠한 자료형을 입력값으로 하고 출력값으로 했는지 혼돈이 올 수 있습니다.
이를 도와주는 것이 타입힌트 입니다.
from __future__ import annotations
from typing import Any, List, Tuple, Dict
위 코드를 실행시켜야 타입힌트를 코드에 삽입할 수 있습니다.
어떤 식으로 타입 힌트를 사용하는지 살펴보겠습니다.
def my_sum(a: int, b:int) -> float
return a + b
위와 같이 입력값과 출력될 값에 대해
어떤 자료형이 들어갈지 명시해 주는 역할을 가집니다.
물론 저 자료형에 대해 지키지 않아도 어떤 오류도 일어나지 않습니다.
타입힌트는 말 그대로 순전히 힌트일 뿐이며
그저 개발자의 의도를 알 수 있다 정도로 알아두면 되겠습니다.
노드구현
이번에는 위에서 설명했던 노드를 구현해보겠습니다.
노드를 구현할 때는 저번 글에서 설명한 클래스를 이용합니다.
class Node:
def __init__(self, data, next):
self.data = data
self.next = next
위와 같이 노드는 자신 스스로의 데이터와 다음 노드에 대한 포인터를 가집니다.
이번에는 위에서 생성한 노드 클래스를 이용해
여러 노드 객체들을 생성하고 서로 연결까지 해보겠습니다.
n0 = Node('A')
n1 = Node('B')
n2 = Node('C')
n0.next = n1 # n0 뒤에 n1을 연결
n1.next = n2 # n1 뒤에 n2를 연결
print(n0.data)
print(n0.next.data)
print(n0.next.next.data)
# 위에서부터 차례대로
# A
# B
# C
# 출력
위 코드에서 저는
각각 A, B, C 데이터를 가진 n0, n1, n2 이름을 가진 노드 3개를 생성하였습니다.
그리고 n0 -> n1 -> n2 순으로 노드를 연결하였습니다.
코드 밑 출력하는 부분을 보면
n0에서 시작하여 연결된 노드들에 대한 데이터들 모두
정상적으로 출력되는 것을 확인할 수 있습니다.
방금 코드에서는 노드를 생성할 때 파라미터를 data만 주고
연결에 대해서는 따로 "n0.next = n1" 과 같이 연결해주었습니다.
이번에는 애초에 노드를 생성할 때 연결이 될 수 있도록 생성하겠습니다.
n2 = Node('C')
n1 = Node('B', n2)
n0 = Node('A', n1)
애초에 위와 같이 노드를 생성할 때 포인터까지 같이 입력을 하면
이미 연결된 노드들을 생성할 수 있습니다.
이 3개의 노드들을 시각적으로 표현하면 다음과 같이 됩니다.