특징이 있는 정보는 어떻게 저장하면 좋을까?
- 전화번호부 정보는 어떻게 저장하면 좋을까?
- 은행 번호표 정보는 어떻게 처리하면 좋을까?
- 서적 정보는 어떻게 관리하면 좋을까?
- 창고에 쌓인 수화물의 위치는 역순으로 찾을 때?
자료구조란 각 상황에 맞게 데이터들마다 효율적인 형태로 저장하고 또 불러와야 합니다. 기본적인 파이썬 데이터 구조에 대해서 알아보겠습니다.
파이썬 기본 데이터 구조
- 스택과 큐(stack & queue with list)
- 튜플과 집합(tuple & set)
- 사전(dictionary)
- Collection 모듈
스택, Stack
스택이란 나중에 넣은 데이터를 먼저 반환하도록 설계된 메모리 구조입니다. Last In First Out(LIFO), 리포 구조라고도 표현하며 Data의 입력을 Push, 출력을 Pop이라고 합니다.
# push를 append(), pop을 pop()으로 사용
numList = [1,3,5,7,9] # 초기값 세팅
numList.append(20) # 20을 push
print(numList) # [1,3,5,7,9,20]
numList.pop() # 20
c = numList.pop() # 9
print(numList) # 출력
[1,3,5,7]
print(c) # 출력
9
스택 구조를 활용하여 입력된 글자를 역순으로 출력
word = input("Input a word : ") # Input Word
word_list = list(word)
for i in range(len(word_list)): # String to List
print(word_list.pop()) # 하나씩 빼면서 출력
print(word_list)
Input a word : python
n
['p', 'y', 't', 'h', 'o']
o
['p', 'y', 't', 'h']
h
['p', 'y', 't']
t
['p', 'y']
y
['p']
p
[]
큐, Quere
큐란 먼저 넣은 데이터를 먼저 반환하도록 설계된 메모리 구조입니다. First In First Out(FIFO), 피포 구조라고도 표현하며 Stack과 반대되는 개념입니다. Data의 입력을 Put, 출력을 Get이라고 합니다.
# put를 append(), get을 pop(0)를 사용
numList = [2,4,6,8,10] # 초기값 세팅
numList.append(20) # 20을 put
numList.append(30) # 30을 put
numList.pop(0) # 2를 get
c = numList.pop(0) # 4를 get
print(numList) # 출력
print(c) # 출력
[6, 8, 10, 20, 30]
4
튜플, Tuple
튜플은 리스트와 같아 리스트의 연산, 인덱싱, 슬라이싱 등을 동일하게 사용합니다. 차이점은 값의 변경이 불가능한 리스트입니다. 선언 시 "[]"가 아닌 "()"사용합니다. 튜플을 사용하는 이유는 변경이 불가능해야 하는 데이터를 주고받을 때 주로 사용합니다. 예를 들어 학번, 이름, 우편번호 등의 데이터를 다룰 때 사용자의 실수에 의한 에러를 사전에 방지하기 위해 사용됩니다.
t = (1,2,3)
print (t + t , t * 2) # (1, 2, 3, 1, 2, 3) (1, 2, 3, 1, 2, 3)
len(t) # 3
t[1] = 5 # Error 발생
TypeError: 'tuple' object does not support item assignment
# 값이 하나인 Tuple은 반드시 ","를 붙여야 함
t = (1)
type(t) # 일반정수로 인식
t = (1, )
type(t) # 튜플로 인식
집합, Set
집합은 값을 순서 없이 저장하는 특징이 있고 중복을 불허하는 자료형입니다. set 객체 선언을 이용하여 객체를 생성합니다. remove()와 discard()는 둘 다 집합에서 엘리먼트를 삭제하는 동작이다. 이 두 메서드에 차이점은 remove()는 없는 key를 지우려고 할 때 keyError를 발생시킨다. 그러나 discard()는 key가 집합에 존재하지 않아도 에러를 발생시키지 않는다.
# set 함수를 사용 1,2,3을 집합 객체 생성 , a = {1,2,3,4,5} 도 가능 # 한 원소 1만 추가, 추가, 중복불허로 추가 되지 않음
s = set([1,2,3,1,2,3])
# print(s) = {1, 2, 3}
s.add(1)
# print(s) = {1, 2, 3}
s.remove(1) # 1 삭제
# print(s) = {2, 3}
s.update([1,4,5,6,7]) # [1,4,5,6,7] 추가
# print(s) = {1, 2, 3, 4, 5, 6, 7}
s.discard(3) # 3 삭제
# print(s) = {1, 2, 4, 5, 6, 7}
s.clear() # 모든 원소 삭제
# print(s) = set()
사전, Dictionary
사전은 데이터를 저장할 때 구분 지을 수 있는 값을 함께 저장하는 특징이 있습니다. 구분을 위한 데이터 고유 값을 Identifier 또는 Key라고 하며 예로 주민등록 번호와 제품의 모델 번호가 있습니다. 이렇게 key 값을 활용하여 value(데이터 값)를 관리합니다. 이처럼 key와 value를 매칭 하여 key로 value를 검색할 수 있으며 다른 언어에서는 Hash Table이라는 용어를 사용합니다. { Key1: Value1, Key2: Value2...}의 형태를 가집니다.
사전(dictionary) 다루기 1
country_code = {} # Dict 생성, country_code = dict() 도 가능
country_code = {"America": 1, "Korea": 82, "China": 86, "Japan": 81}
print(country_code) # {'America': 1, 'China': 86, 'Korea': 82, 'Japan': 81}
print(country_code.items()) # Dict 데이터 출력
# Dict_items([('America', 1), ('China', 86), ('Korea', 82), ('Japan', 81)])
print(country_code.keys()) # Dict 키 값만 출력
# Dict_keys(["America", "China", "Korea", "Japan"])
country_code["German"]= 49 # Dict 추가
print(country_code) # {'America': 1, 'German': 49, 'China': 86, 'Korea': 82, 'Japan': 81}
print(country_code.values()) # Dict Value만 출력
# dict_values([1, 49, 86, 82, 81])
사전(dictionary) 다루기 2
country_code = {"America": 1, "Korea": 82, "China": 86, "Japan": 81}
country_code["German"]= 49 # Dict 추가
for k,v in country_code.items():
print ("Key : ", k)
print ("Value : ", v)
# Key : America
# Value : 1
# Key : Gernman
# Value : 49
# Key : China
# Value : 86
# Key : Korea
# Value : 82
# Key : Japan
# Value : 81
print("Korea" in country_code.keys()) # Key값에 "Korea"가 있는지 확인
# True
print(82 in country_code.values()) # Value값에 82가 있는지 확인
# True
Reference
TEAMLAB Director 최성철 님, boostcamp AI Tech Pre-Course
'PROGRAMMING > Python' 카테고리의 다른 글
[Python] Dictionary get method (파이썬 딕셔너리 팁) (44) | 2023.04.03 |
---|---|
[Python] 파이썬 배열 [:] / [::] 사용법 (feat.list slicing syntax) (40) | 2023.03.01 |
[Python] 파이썬 분수, 표현 / 연산 / 변환 (feat.Fractions module) (7) | 2023.02.11 |
[Python] 누적합 / 순열 / 조합 (feat.itertools module) (4) | 2023.02.03 |
[Python for AI]파이썬 객체지향프로그래밍 기법, Python Object-Oriented Programming(OOP) (11) | 2022.12.09 |