Python & AI Math ~ 5강
나중에 넣은 데이터를 먼저 반환하는 메모리 구조 (Last In First Out)
데이터를 입력하는 push의 경우 append()를 사용하고 삭제할 때는 pop()을 사용
먼저 넣은 데이터를 먼저 반환하는 메모리 구조 (First In First Out)
데이터를 입력하는 put의 경우 append()를 사용하고 맨 앞의 데이터를 출력할 때는 pop(0)을 사용
값의 변경이 불가능한 리스트로 선언할 때 ()를 사용
리스트의 연산, 인덱싱, 슬라이싱은 동일하게 사용하나 데이터의 변화가 불가능하고 할당이 안됨
프로그램을 작동하는 동안 변경되지 않는 데이터를 저장하고 싶을 떄 사용 (사용자의 실수로 인한 에러 방지)
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.union(set), set.intersection(set) 등 )
사전으로 데이터를 저장할 때에 구분 지을 수 있는 값을 함께 저장
구분을 위한 데이터 고유 값을 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])
List, Tuple, Dict에 대한 파이썬 빌트인 확장 자료구조
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
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})
from collections import namedtuple
x = namedtuple('K', ['a', 'b'])
y = x(1, 2)
print(y[0] + y[1])
>>> 3
string type의 값을 자르는 기준으로 '기준값'으로 나눠서 List 형태로 변환
x = "I like pizza."
a = x.split() # 공백을 기준으로 문자열 나누기
>>> ['I', 'like', 'pizza.']
x = 'red,orange,yellow'
a = x.split(',') # unpacking / 쉼표를 기준으로 문자열 나누기
>>> ['red', 'orange', 'yellow']
string으로 구성된 list를 합쳐서 하나의 string으로 변환
x = ['a', 'b', 'c', 'd']
a = ''.join(x) # 공백 없이 x에 있는 것 연결
>>> 'abcd'
x = ['I', 'you', 'we']
a = '-'.join(x) # -로 연결
>>> 'I-you-we'
기존 list를 사용하여 간단히 다른 list를 만드는 기법으로 속도가 빠름
a = [i for i in range(5)]
>>> [0, 1, 2, 3, 4]
list의 요소를 추출할 때 번호를 붙여서 추출
for a, b in enumerate(['a', 'b', 'c']):
print(a, b)
>>> 0 a
1 b
2 c
두 개의 리스트의 값을 병렬적으로 추출
x = ['red', 'orange' 'yellow']
y = [1, 2, 3]
for a, b in zip(x, y):
print(a, b)
>>> red 1
orange 2
yellow 3
함수 이름 없이 함수처럼 쓸 수 있는 익명 함수
f = lambda x, y: x+y
print(f(1, 2))
>>> 3
두개 이상의 list에도 함수를 적용할 수 있음
a = [1, 2, 3, 4, 5]
print(list(map(lambda x: x+x, a)))
>>> [2, 4, 6, 8, 10]
list에 똑같은 함수를 적용해 통합
from functools import reduce
print(reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])) # 결과를 다시 x로 보고 더함
>>> 15
sequence 자료형에서 데이터를 순서대로 추출하는 object
iter() 와 next() 함수로 iterable 객체를 iterator object로 사용
x = ['a', 'b', 'c']
iter_obj = iter(x) # 다음 위치인 메모리 주소를 가지고 있음
print(next(iter_obj)
>>> 'a'
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))