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))