hojeomi blog

Day 3-1. Python Data Structure 본문

AI/Course

Day 3-1. Python Data Structure

호저미 2021. 1. 20. 23:32
Day 3.

1. 스택: LIFO

  • append로 붙이기, pop()으로 마지막 빼기
  • [참고] sort()는 return 하지 않고 값만 변화시킨다.(아래 예시) → sorted()를 통해 변화된 값을 새로 배정할 수 있다.
  • but, pop()은 return과 변화 모두
In [4]:
# sort()
a = [7,3,4,5,1]
a.sort()
print(a)
[1, 3, 4, 5, 7]
In [5]:
# sorted()
a = [7,3,4,5,1]
b = sorted(a)

print(f"a: {a}, b: {b}")
a: [7, 3, 4, 5, 1], b: [1, 3, 4, 5, 7]
In [9]:
# pop()
a = [7,3,4,5,1]
b = a.pop()
print(f"a: {a}, b: {b}") # pop()으로 제일 끝에 있는 값이 a에서 떨어지고, 그 떨어진 값이 b에 할당(return)된다.
a: [7, 3, 4, 5], b: 1
In [ ]:
 
In [ ]:
 

2. 큐: FIFO

  • append로 붙이기, pop(0)으로 처음 빼기
In [ ]:
 
In [ ]:
 

3. 튜플

  • 값의 변경이 불가능한 리스트
    • 리스트의 연산, 인덱싱, 슬라이싱 등의 기능을 동일하게 쓰지만, 값의 변경이 불가능함이 제일 큰 특징
  • 언제 쓸까?
    1) 프로그램 작동하는 동안 변경되지 않을 데이터의 저장 예) 학번, 이름
    2) 함수의 변환값 등 사용자 실수에 의한 에러 방지
In [12]:
t = (1,2,3)

t+t
Out[12]:
(1, 2, 3, 1, 2, 3)
In [13]:
t*2
Out[13]:
(1, 2, 3, 1, 2, 3)
In [ ]:
 
In [ ]:
 

4. 집합(set)

  • 값을 순서없이 저장, 중복 불허하는 자료형
  • set 객체 선언을 이용하여 객체 생성(리스트는 [] 부호를 통해 객체 생성하는 것과 다름)
In [22]:
a = set([1,2,3])
a
Out[22]:
{1, 2, 3}
In [23]:
a.add(1) # 이미 있는 원소인 1을 추가하면 중복 -> 중복 불허
a
Out[23]:
{1, 2, 3}
In [24]:
a.remove(1) # 삭제
a
Out[24]:
{2, 3}
In [25]:
a.update([4,5,6]) # 추가
a
Out[25]:
{2, 3, 4, 5, 6}
In [26]:
a.clear() # 모든 원소 삭제
a
Out[26]:
set()

4-a. 집합의 연산

In [27]:
s1 = set([1,2,3,4,5])
s2 = set([3,4,5,6,7])
In [29]:
s1.union(s2) # 합집합
Out[29]:
{1, 2, 3, 4, 5, 6, 7}
In [31]:
s1 | s2 # 합집합
Out[31]:
{1, 2, 3, 4, 5, 6, 7}
In [32]:
s1.intersection(s2) # 교집합
Out[32]:
{3, 4, 5}
In [33]:
s1 & s2 # 교집합
Out[33]:
{3, 4, 5}
In [34]:
s1.difference(s2) # s1에서의 s2와의 차집합
Out[34]:
{1, 2}
In [35]:
s1 - s2 # s1에서의 s2와의 차집합
Out[35]:
{1, 2}
In [86]:
s1.subtract(s2) # collections.Counter()에서 set의 연산을 지원하는데, 그 때 사용 가능
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-86-3cbc33e8f686> in <module>
----> 1 s1.subtract(s2) # collections.Counter()에서 set의 연산을 지원하는데, 그 때 사용 가능

AttributeError: 'set' object has no attribute 'subtract'
In [ ]:
 
In [ ]:
 

5. collections 모듈

  • list, tuble, dic에 대한 파이썬 built-in 구조(모듈)
  • 종류
    1) from collections import deque
    2) from collections import Counter
    3) from collections import OrderedDict -> 이제(파이썬 3.6ver 이후) 잘 안씀
    4) from collections import defaultdict
    5) from collections import namedtuple

5-a. deque

  • 스택를 지원하는 모듈
  • 리스트에 비해 빠른 자료 저장 방식
  • rotate, reverselinked list의 특성을 지원함 + 기준 리스트 형태의 함수를 지원함
In [60]:
from collections import deque

deque_list = deque()

for i in range(5):
    deque_list.append(i)
    print(deque_list)
deque([0])
deque([0, 1])
deque([0, 1, 2])
deque([0, 1, 2, 3])
deque([0, 1, 2, 3, 4])
In [61]:
# 한 칸씩 오른쪽으로 밀림(회전)
for i in range(3): 
    deque_list.rotate()
    print(deque_list)
deque([4, 0, 1, 2, 3])
deque([3, 4, 0, 1, 2])
deque([2, 3, 4, 0, 1])
In [62]:
# 두 칸씩 오른쪽으로 밀림(회전)
for i in range(3): 
    deque_list.rotate(2)
    print(deque_list)
deque([0, 1, 2, 3, 4])
deque([3, 4, 0, 1, 2])
deque([1, 2, 3, 4, 0])
In [63]:
deque(reversed(deque_list)) # 뒤집은 값 생성(새로 할당). but deque_list 자체가 바뀌지는 않음
Out[63]:
deque([0, 4, 3, 2, 1])
In [64]:
deque_list 
Out[64]:
deque([1, 2, 3, 4, 0])
In [65]:
deque_list.extend([5,6,7]) #extendleft 또는 appendleft와 같음
deque_list
Out[65]:
deque([1, 2, 3, 4, 0, 5, 6, 7])

5-b. defaultdict

  • 딕셔너리에서 없는 키를 호출할 때 오류가 남 → defaultdict를 이용해서 없는 키 호출 시, default 값 또는 다른 값을 지정할 수 있음
In [67]:
# dict의 예
d = dict()
print(d['fitst']) # d 딕셔너리에 fist 키 값이 없어서 나는 오류
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-67-29c95cfa1855> in <module>
      1 # dict의 예
      2 d = dict()
----> 3 print(d['fitst']) # d 딕셔너리에 fist 키 값이 없어서 나는 오류

KeyError: 'fitst'
In [77]:
# defaultdict 예
from collections import defaultdict

d = defaultdict(lambda: 0) # defaultdict애 "함수" 형태로 넣어줘야 함
d['fist']
Out[77]:
0
In [78]:
def func():
    return 10

d = defaultdict(func)
d['fitst']
Out[78]:
10

5-c. Counter

  • set의 연산을 지원함(집합 연산) -> c + d, c & d, c | d 사용 가능
In [89]:
from collections import Counter

c = Counter(a=4, b=2, c=0, d=-2)
d = Counter(a=1, b=2, c=3, d=4)
In [90]:
c.subtract(d) # c - d
c
Out[90]:
Counter({'a': 3, 'b': 0, 'c': -3, 'd': -6})

5-d. namedtuple

  • 튜플 형태로 Data 구조체를 저장하는 방법
  • 데이터베이스나 엑셀처럼 데이터를 보기에 편하지만, 파이썬에서는 class를 쓰는 게 낫다.
In [96]:
from collections import namedtuple

Point = namedtuple('Point', ['x','y']) # Point를 선언해서 Point라는 구조에 값을 저장할 수 있다
Point
Out[96]:
__main__.Point
In [97]:
PPoint = namedtuple('PPoint', ['x','y'])
PPoint
Out[97]:
__main__.PPoint
In [99]:
p = Point(x=11,y=22)
p
Out[99]:
Point(x=11, y=22)
In [100]:
x,y = p
print(x, y)
11 22
In [102]:
print(Point(33,44))
Point(x=33, y=44)
In [103]:
print(p.x + p.y)
33
In [ ]:
 

'AI > Course' 카테고리의 다른 글

4-1. 파이썬 OOP(객체 지향 프로그래밍)  (1) 2021.01.22
3-2. Pythonic Code  (0) 2021.01.21
Day 2. 파이썬 기초 문법  (2) 2021.01.19
Day 1. 파이썬 개요  (0) 2021.01.18
Day 0-2. 윈도우 Terminal - cmder, Windows Terminal  (0) 2021.01.18
Comments