Python data structure(복습용)
특징이 있는 정보는 어떻게 저장하면 좋을까?
- 전화번호부 정보는 어떻게 저장하면 좋을까?
- 은행 번호표 정보는 어떻게 처리하면 좋을까?
- 서적 정보는 어떻게 관리하면 좋을까?
- 창고에 쌓인 수화물의 위치를 역순으로 찾을 때는 어떻게 하는게 좋을까?
파이썬 기본 데이터 구조
- 스택과 큐(stack & queue)
- 튜플과 집합(tuple & set)
- 사전(dictionary)
- Collection 모듈
- 데이터를 하도록 설계된 메모리 구조
- : In Out
- Data의 입력을 , 출력을 이라고 함
stack with list object
- 리스트를 사용하여 스택 구조를 구현 가능
- push를 , pop을 을 사용
a = [1, 2, 3, 4, 5]
a.append(20)
c = a.pop() # pop은 return 값을 가진다. 여기서 c =
- 데이터를 하도록 설계된 메모리 구조
- : In Out
- Stack과 반대되는 개념
queue with list object
- 리스트를 사용하여 큐 구조를 구현 가능
- 을 , 을 을 사용
- 값의 변경이 리스트
- 선언 시 "[]"가 아닌 ""를 사용
- 리스트의 연산, 인덱싱, 슬라이싱 등 동일하게 사용가능
- 쓰는 이유?
- 변경되지 않는 데이터를 저장할 때 사용
- 함수의 반환값 등 사용자의 실수에 의한 에러를 사전에 방지
: 'tuple' object does not support item assignment # 값의 할당을 사전에 방지
t = (1) # 일반 정수로 인식
t = # 튜플로 선언하려면 를 사용해야 한다
- 값을 저장, 을 불허 하는 자료형
- ([object]) 또는 를 사용해서 객체 생성
집합의 연산
- 수학에서 활용하는 다양한 집합연산 가능
s1 = set([1, 2, 3, 4, 5])
s1 = set([3, 4, 5, 6, 7])
s1.(s1) or s1 | s2
# {1, 2, 3, 4, 5, 6, 7}
s1.(s2) or s1 s2
# {3, 4, 5}
s1.(s2) or s1 s2
# {1, 2}
- 데이터를 저장할 때 구분 지을 수 있는 값을 함께 저장
- 구분을 위한 데이터 고유값을 또는 key라고 함
- Key값을 활용하여, 데이터 값(Value)을 관리함
- 다른 언어에서는 이라는 용어를 사용
dict_example = {Key1 : Value1, Key2 : Value2, Key3 : Value3...}
for dic_item in dict_example.items():
print(dic_item)
(Key1 : Value1) # 튜플의 형태로 저장(값을 바꿀 수 없음)
(Key2 : Value2)
(Key3 : Value3)
dict_example.() # 키 값만 출력
dict_example.() # value 값 출력
# key값에 "Key100"이 있는지 확인
Lab-dict
sorted_dict = sorted(dictlist, key = getKey, reverse = True)
# dictlist: 정렬할 딕셔너리들의 리스트
# key 인자: 각 딕셔너리에 대해 정렬 기준을 정의하는 함수
# reverse=True: 내림차순으로 정렬
- List, Tuple, Dict에 대한 Python Built-in 확장 자료 구조(모듈)
- 편의성, 실행 효율성(메모리 사용량 or 시간 복잡도)
from collections import deque
from collections import Counter
from collections import OrderedDict
from collections import defaultdict
from collections import namedtuple
- queue와 stack을 모두 지원하는 모듈
- List에 비해 효율적인(빠른) 자료 저장 방식을 지원
deque_list = deque()
for i in range(5):
deque_list.(i)
print(deque_list)
deque_list.(10)
print(deque_list)
# deque([0, 1, 2, 3, 4])
# deque([10, 0, 1, 2, 3, 4])
- , reverse 등 [^1]의 특성을 지원함
- 기존 list 형태의 함수를 모두 지원함
from collections import deque
deque_list = deque()
for i in range(5):
deque_list.append(i)
deque_list.(10)
# deque([10, 0, 1, 2, 3, 4])
deque_list.(1) # 오른쪽으로 1칸 이동
# deque([4, 10, 0, 1, 2, 3])
deque_list.([5, 6, 7])
# deque([4, 10, 0, 1, 2, 3, 5, 6, 7])
deque_list.([5, 6, 7]) # 5, 6, 7을 왼쪽에 추가하면 7, 6, 5 순서로 추가됨
# deque([7, 6, 5, 4, 10, 0, 1, 2, 3, 5, 6, 7])
from collections import deque
import time
start_time = time.()
deque_list = deque()
for i in range(10000):
for i in range(10000):
deque_list.append(i)
deque_list.pop()
print(time.() - start_time, "seconds")
# 3.909028 seconds
start_time = time.()
just_list = []
for i in range(10000):
for i in range(10000):
just_list.append(i)
just_list.pop()
print(time.()- start_time, "seconds")
# 8.662928999999998 seconds
- Dict와 달리, 데이터를 입력한 순서대로 dict를 반환함
- 현재는 순서를 보장하여 출력하기 때문에 참고만
- Dict type의 값에 을 지정, 신규값 생성 시 사용하는 방법
d = dict()
print(d["first"])
------------------------------------------
KeyError: 'first'
- 존재하지 않는 키를 접근하려 할 때 해 주는 기능
from collections import defaultdict
d = defaultdict(object) # Default dictionary를 생성
d = defaultdict(lambda: 0) # Default 값을 0으로 설정
print(d["first"])
#
from collections import defaultdict
text = """
A press release is the quickest and easiest way to get free publicity. If
well written, a press release can result in multiple published articles about your
firm and its products. And that Can mean new prospects contacting you asking you to
sell to them.
""".lower().split()
text_counter = defaultdict(object)
text_counter = defaultdict(lambda: 0)
for word in text:
text_counter[word] += 1
print(text_counter["to"])
# 3
- Sequence type의 data element들의 갯수를 dict 형태로 반환
from collections import Counter
c = Counter()
c = Counter('gallahad')
print(c)
# Counter({'a': 3, 'l': 2, 'g': 1, 'd': 1, 'h': 1})
- Set의 연산들을 지원함(set의 확장 버전)
- Tuple 형태로 Data 구조체를 저장하는 방법
- 저장되는 data의 variable을 사전에 지정해서 저장함
from collections import
Point = ('Point', ['x', 'y'])
p = Point(x = 11, y = 22)
print(p[0]+p[1])
# 33
댓글남기기