[Boostcamp] Day 2

유니·2023년 3월 28일
0

Day 2

Python & AI Math ~ 5강


Stack

나중에 넣은 데이터를 먼저 반환하는 메모리 구조 (Last In First Out)
데이터를 입력하는 push의 경우 append()를 사용하고 삭제할 때는 pop()을 사용

Queue

먼저 넣은 데이터를 먼저 반환하는 메모리 구조 (First In First Out)
데이터를 입력하는 put의 경우 append()를 사용하고 맨 앞의 데이터를 출력할 때는 pop(0)을 사용

Tuple

값의 변경이 불가능한 리스트로 선언할 때 ()를 사용
리스트의 연산, 인덱싱, 슬라이싱은 동일하게 사용하나 데이터의 변화가 불가능하고 할당이 안됨
프로그램을 작동하는 동안 변경되지 않는 데이터를 저장하고 싶을 떄 사용 (사용자의 실수로 인한 에러 방지)

x = (1, 2, 3)

print(t+t, t * 2)
>>> (1, 2, 3, 1, 2, 3)(1, 2, 3, 1, 2, 3)

t[1] = 5
>>> 에러 발생

Set

집합으로 값을 순서없이 저장하며 중복을 허용하지 않는 자료형
set 객체를 선언해 객체를 생성함
수학에서 활용하는 다양한 집합연산 가능 ( set.union(set), set.intersection(set) 등 )

Dict

사전으로 데이터를 저장할 때에 구분 지을 수 있는 값을 함께 저장
구분을 위한 데이터 고유 값을 Key, 데이터 값을 Value라고 함
key와 value를 매칭해 key로 value를 검색

x = {'a':1, 'b':2, 'c':3}

x.items()
>>> Dict_items([('a', 1), ('b', 2), ('c', 3)])

x['a']
>>> 1

x.keys()
>>> Dict_keys(['a', 'b', 'c'])

x.values()
>>> Dict_values([1, 2, 3])

Collections

List, Tuple, Dict에 대한 파이썬 빌트인 확장 자료구조

  • Deque
    stack과 queue를 지원하는 모듈로 빠른 자료 저장 방식을 지원
    양방향에서 데이터를 처리할 수 있는 queue형 자료구조
    rotate, reverse 등 LinkedList의 특성을 지원
    효율적인 메모리 구조로 처리 속도가 빠름
from collections import deque

x = deque()
for i in range(4):
	x.append(i)
>>> x = [0, 1, 2, 3]

# 자료구조의 왼쪽에 데이터 넣음
x.appendleft(5)
>>> x = [5, 0, 1, 2, 3]

# rotate로 n칸씩 옆으로 이동
x.rotate(2)
>>> x = [2, 3, 5, 0, 1]

# 리스트 추가 (왼쪽에서부터)
x.extendleft([7, 8, 9])
>>> x = [9, 8, 7, 2, 3, 5, 0, 1]
  • OrderedDict
    데이터를 입력한 순서대로 dict를 반환
    dict type 값을 value나 key값으로 정렬할 때 사용 가능

  • defaultdict
    dict type의 값에 기본 값을 지정하고 신규값을 생성할 때 사용하는 방법

from collections import faultdict
x = defaultdict(object)
x - defaultdict(lambda: 0) # default값을 0으로 설정
x['first']
>>> 0
  • Counter
    데이터 요소들의 갯수를 dict 형태로 반환
    set 연산들을 지원하기도 함
from collections import Counter

x = Counter('hello')

print(x)
>>> Counter({'l':2, 'h':1, 'e':1, 'o':1})
x = Counter(a = 5, b = 4, c = 3)
y = Counter(a = 1, b = 2, c = 3)

print(x + y)
>>> Counter({'a' : 6, 'b' : 6, 'c' : 6})
  • namedtuple
    tuple 형태로 데이터 구조체를 저장하는 방법
    지정되는 데이터의 변수를 사전에 지정해서 저장
from collections import namedtuple

x = namedtuple('K', ['a', 'b'])
y = x(1, 2)

print(y[0] + y[1])
>>> 3

Split

string type의 값을 자르는 기준으로 '기준값'으로 나눠서 List 형태로 변환

x = "I like pizza."
a = x.split() # 공백을 기준으로 문자열 나누기

>>> ['I', 'like', 'pizza.']

x = 'red,orange,yellow'
a = x.split(',') # unpacking / 쉼표를 기준으로 문자열 나누기

>>> ['red', 'orange', 'yellow']

Join

string으로 구성된 list를 합쳐서 하나의 string으로 변환

x = ['a', 'b', 'c', 'd']
a = ''.join(x) # 공백 없이 x에 있는 것 연결

>>> 'abcd'

x = ['I', 'you', 'we']
a = '-'.join(x) # -로 연결

>>> 'I-you-we'

List comprehension

기존 list를 사용하여 간단히 다른 list를 만드는 기법으로 속도가 빠름

a = [i for i in range(5)]
>>> [0, 1, 2, 3, 4]

enumerate

list의 요소를 추출할 때 번호를 붙여서 추출

for a, b in enumerate(['a', 'b', 'c']):
	print(a, b)

>>> 0 a
	1 b
    2 c

zip

두 개의 리스트의 값을 병렬적으로 추출

x = ['red', 'orange' 'yellow']
y = [1, 2, 3]

for a, b in zip(x, y):
	print(a, b)

>>> red 1
	orange 2
    yellow 3

lambda

함수 이름 없이 함수처럼 쓸 수 있는 익명 함수

f = lambda x, y: x+y
print(f(1, 2))

>>> 3

map

두개 이상의 list에도 함수를 적용할 수 있음

a = [1, 2, 3, 4, 5]
print(list(map(lambda x: x+x, a)))

>>> [2, 4, 6, 8, 10]

reduce

list에 똑같은 함수를 적용해 통합

from functools import reduce

print(reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])) # 결과를 다시 x로 보고 더함

>>> 15

iterable object

sequence 자료형에서 데이터를 순서대로 추출하는 object
iter()next() 함수로 iterable 객체를 iterator object로 사용

x = ['a', 'b', 'c']

iter_obj = iter(x) # 다음 위치인 메모리 주소를 가지고 있음

print(next(iter_obj)
>>> 'a'

generator

iterator object를 특수한 형태로 사용해주는 함수
요소가 사용되는 시점에 값을 메모리에 반환 - yield를 사용해 하나의 요소만 반환

def generator_list(value):
	result = []
    for i in range(value):
    	yield i # 호출할 때 데이터를 출력해 메모리 주소를 절약할 수 있음

generator형태의 list 생성 시에 [] 대신 () 사용해 표현
gen = (n*n for n in range(10))

0개의 댓글