본 포스트는 '부스트코스 코칭스터디 AI Basic 1기'로 활동하고 '인공지능 기초 다지기' 강의를 들으며 공부한 것을 정리한 글입니다. 굳이 이걸 왜 기초에서 알아야하나 싶은 게 많아서 뒷부분은 생략했습니다. 필요 시 나중에 보충할 예정입니다.
# 1. Python Data Structure(파이썬 자료구조)
자료구조는 데이터를 저장할 때, 데이터 특징에 따라 컴퓨터에 효율적으로 정리하기 위한 데이터의 저장 및 표현 방식을 의미한다. 데이터의 특징에 알맞은 형태로 데이터를 저장하면 컴퓨터의 메모리를 효율적으로 사용하고 코드 작성에도 편리해진다.
1. 스택과 큐(stack & queue with list)
스택
나중에 넣은 데이터를 먼저 반환하는 메모리 구조이다.
Last In First Out, 즉 LIFO라고 한다. Data의 입력을 Push, 출력을 Pop이라고 한다.
리스트를 사용해 스택 구조를 구현할 수 있는데 push는 append()에, pop은 pop()을 사용한다.
큐
스택과 반대로, 먼저 넣은 데이터를 먼저 반환하는 메모리 구조이다.(선입선출)
First In First Out, 즉 FIFO라고 한다. Data의 입력을 Put, 출력을 Get이라고 한다.
리스트를 사용해 큐 구조를 구현할 수 있는데 put은 append()에, get은 pop(0)을 사용한다.
2. 튜플과 집합(tuple & set)
튜플
값의 변경이 불가능한 리스트이다. '[]'가 아니라 '()'를 사용한다.
리스트에서 사용하는 연산, 인덱싱, 슬라이싱 모두 그대로 사용할 수 있다. 그렇지만 튜플 데이터 자체에는 변화를 줄 수 없다. 값을 바꿀 수 없기 때문에 실수로 인한 에러를 방지할 수 있다.
집합
값을 순서없이 저장하고 중복을 허용하지 않는 자료형이다. set()으로 감싸서 집합 객체를 만들 수 있다.
add(), remove(), update(), discard(), clear()를 통해 원소를 추가하고 삭제할 수 있다. 또한 union() 또는 |, intersection() 또는 &, difference() 또는 -를 통해서 각각 합집합, 교집합, 차집합 연산을 할 수 있다.
3. 사전(dictionary)
데이터를 key와 value로 구분하여 저장한다. 각각의 key와 value는 매칭되고 key로 value를 검색할 수 있다.
파이썬이 아닌 다른 언어서는 딕셔너리를 Hash Table이라고 부른다.
기본적으로 (key, value)는 튜플 형식이다.
딕셔너리 데이터 출력하기
for dict_items in country_code.items():
print(type(dict_items))
key 값만 출력하기
country_code.keys()
value 값만 출력하기
country_code.values()
언패킹 해서 key, value 모두 출력하기
for k, v in country_code.items():
print("key : ", k)
print("value : ", v)
4. Collection 모듈
list, tuple, dict에 대한 Python Built-in 확장 자료 구조(모듈)이다.
from collections import deque, counter, OrderedDict, defaultdict, namedtuple 로 사용할 수 있다.
# 2. Pythonic Code(파이썬 스타일 코드)
python을 사용하면 다른 코드에 비해 쉽게 작성할 수 있는 것이 많다. 대표적인 예가 for문 대신에 함수의 인자로 리스트를 전달하는 것이 있다. 여러가지 pythonic code를 살펴보자.
0. Why Pythonic Code?
이미 많은 개발자들이 python 스타일로 코딩하기 때문에 남의 코드에 대한 이해도를 높일 수 있다. 또한 단순 for문을 사용하는 것보다 list가 더 빠르기 때문에 효율이 좋다. 제일 중요한 것은 간지가 난다.
1. split & join
split()
string type의 값을 "기준값"으로 나눠서 list 형태로 변환한다.
join()
list 안의 문자들을 합친다.
example.split(".")
"-".join(colors)
2. list comprehension
기존 리스트를 사용하여 간단하게 다른 리스트를 만드는 것이다. for + append 보다 속도가 빠르다.
# list comprehension
result = [i for i in range(10)]
result = [i for i in range(10) if i % 2 == 0] # if로 조건도 추가할 수 있다. -> 필터
# for + append
result = []
for i in range(10):
result.append(i)
이중 for 문도 list comprehension으로 구현할 수 있다.
word_1 = "Hello"
word_2 = "World"
result = [i+j for i in word_1 for j in word_2]
# general
for i in word_1:
for j in word_2:
result.append(i+j)
그 밖에 다양한 list comprehension 사용법이 있다. 일차원/이차원 적용도 가능하다.
3. enumerate & zip
enumerate
list의 element를 추출할 때 index를 붙여서 추출한다.
for i, v in enumerate("ABC"):
print("{0}\t{1}".format(i,v))
>>> 0 A
1 B
2 C
zip
두 개의 list의 값을 병렬적으로 추출한다.
alist = ['a1', 'a2', 'a3']
blist = ['b1', 'b2', 'b3']
# 튜플로 뽑기
[ c for c in zip(alist, blist) ]
# 리스트로 뽑기
[ [a,b] for a,b in zip(alist, blist)]
4. lambda & map & reduce
lambda
함수 이름 없이, 함수처럼 쓸 수 있는 익명함수이다.
다만, PEP8에서는 lambda 사용을 지양하며 def를 쓸 것을 추천하고 있다.(문법이 어렵고 남들이 보기 어려워서)
# Lambda func
f = lambda x,y : x+y
(lambda x,y : x+y)(1,4)
print(f(1,4))
# General func
def f(x,y):
return x+y
print(f(1,4))
map
map() 함수의 첫 번째 인자로 들어온 함수를 map() 함수의 두 번째 인자마다 적용시킨다.
두 개 이상의 list에도 적용할 수 있고, if filter도 사용할 수 있다.
하지만 map 보다는 list comprehension을 이용하는 방법이 권장된다.
ex = [1,2,3]
f = lambda x: x**2
list(map(f, ex))
5. generator
6. asterisk
'Study > AI' 카테고리의 다른 글
[데이터 처리](Kaggle Pandas Tutorials) 1. Pandas 이용하여 데이터 생성하고 읽고 쓰기 (0) | 2022.06.09 |
---|---|
[모두의 딥러닝] #5. 딥러닝을 이용한 자연어 처리(NLP) (0) | 2022.02.17 |
[부스트코스 코칭스터디 AI Basic 1기] #1-2. 파이썬 기초 문법 (0) | 2022.02.15 |
[모두의 딥러닝] #4. MLP과 CNN로 MNIST 데이터 분류하기 (0) | 2022.02.14 |
[SMARCLE 2022 AI Study] 미국 Boston 집 값 예측 (0) | 2022.02.12 |