3 분 소요

문서 변환

특징이 있는 정보는 어떻게 저장하면 좋을까?

  • 전화번호부 정보는 어떻게 저장하면 좋을까?
  • 은행 번호표 정보는 어떻게 처리하면 좋을까?
  • 서적 정보는 어떻게 관리하면 좋을까?
  • 창고에 쌓인 수화물의 위치를 역순으로 찾을 때는 어떻게 하는게 좋을까?

파이썬 기본 데이터 구조

  • 스택과 큐(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
        

댓글남기기