반응형
Python Basics for AI¶
- 기초적인 파이썬 문법 및 개념
- 쌩기초 및 이미 아는 개념은 정리하지 않음
In [1]:
from collections import deque
# deque 생성
deque_list = deque()
for i in range(5):
deque_list.append(i)
# 맨 앞에 append
deque_list.appendleft(10)
deque_list
Out[1]:
In [2]:
deque_list.append(100)
deque_list
Out[2]:
In [3]:
# 값의 위치를 한칸씩 옮김
deque_list.rotate(1)
deque_list
Out[3]:
OrderedDict¶
- 데이터를 입력한 순서대로 dict를 반환한다. (근데 python 3.6 버전 이상부터는 dict 타입도 입력한 순서를 보장하기 때문에 사실상 의미는 없다.)
In [6]:
from collections import OrderedDict
d = {}
d['x'] = 100
d['z'] = 300
d['y'] = 200
for k, v in OrderedDict(sorted(d.items(), key=lambda t: t[0])).items():
print(k, v)
defaultDict¶
- Dict 타입 값에 기본 값을 지정할 수 있다.
- 신규값 생성시 사용하는 방법이다.
In [8]:
from collections import defaultdict
# default 값을 0으로 설정함
d = defaultdict(lambda : 0)
d
Out[8]:
In [9]:
d['first']
Out[9]:
Counter¶
- 시퀀스 타입의 데이터 요소들의 갯수를 dict 타입으로 반환해준다.
In [11]:
from collections import Counter
bs = ['B','S','S','S','B','S','B']
c = Counter(bs)
c
Out[11]:
namedtuple¶
- 튜플 형태로 데이터 구조체를 저장하는 방법이다.
- 저장되는 데이터의 변수를 사전에 지정해서 사용함.
In [15]:
from collections import namedtuple
# 이 튜플의 이름은 Point이고, 이 안에는 x와 y값이 들어있다고 선언이 된 것
Point = namedtuple('Point', ['x','y'])
p = Point(11, y=22)
print(p[0], p[1])
# 이런식으로 불러와서 사용할 수 있다
x, y = p
print(x, y)
print(p.x, p.y)
Pythonic code¶
Split and Join¶
In [1]:
# split
items = 'zero one two'
items.split(' ')
# join
colors = ['red', 'blue', 'black']
"-".join(colors)
Out[1]:
List Comprehension¶
In [3]:
result = [i for i in range(10)]
result
Out[3]:
In [5]:
result = [i for i in range(10) if i % 2 == 0]
result
Out[5]:
In [8]:
case_1 = ['A','B','C']
case_2 = ['D','E','F']
# one_dimension
# 앞에서부터 순서대로 (일반적인 순서)
[i+j for i in case_1 for j in case_2]
Out[8]:
In [9]:
# two_dimension
# 뒤에서부터 시작함
[[i+j for i in case_1] for j in case_2]
Out[9]:
reduce function¶
In [11]:
from functools import reduce
# 대용량 데이터를 다룰 때 주로 사용함
# 처음 1과 2를 더하고(x+y) -> 더한 값이 다음 x가 된다.
print(reduce(lambda x, y : x+y, [1,2,3,4,5]))
Generator¶
- iterable object를 특수한 형태로 사용해주는 함수
- 메모리 측면에서 iter보다 훨씬 효율적임
- 필요할 때 불러서 출력하자
- yield를 사용해 한번에 하나의 element만 반환함
- list comprehension처럼 사용할 수 있는데, generator expression라고 부른다. 대괄호 대신 소괄호()를 사용함
In [51]:
def geneartor_list(value):
result = []
for i in range(value):
yield i
geneartor_list(5)
Out[51]:
In [50]:
gen_ex = (n*n for n in range(10))
print(type(gen_ex))
unpacking container (asterisk 사용)¶
In [18]:
ex = ([1,2], [3,4], [5,6])
for value in zip(ex):
print(value)
In [19]:
# 같은 인덱스끼리 나옴
ex = ([1,2], [3,4], [5,6])
for value in zip(*ex):
print(value)
First class object¶
- 변수나 데이터 구조에 할당이 가능한 객체
- 함수 자체가 파라미터나 리턴 값으로 사용이 가능하다
In [27]:
def square(x):
return x * x
def cube(x):
return x*x*x
# method라는 함수 자체가 파라미터로 사용되고 있다
def formula(method, argument_list):
return [method(value) for value in argument_list]
inner function¶
- 일급 함수니까 inner function이 가능해짐
In [28]:
# 1. 함수 내에 또 다른 함수가 존재함
def print_msg(msg):
def printer():
print(msg)
printer()
print_msg("Hello, Python")
In [33]:
# 2. closures : inner function을 return값으로 변환
def print_msg(msg):
def printer():
print(msg)
return printer
another = print_msg("Hello, Python")
another()
In [35]:
# closure example
def tag_func(tag, text):
text = text
tag = tag
def inner_func():
return '<{0}>{1}<{0}>'.format(tag, text)
return inner_func
h1_func = tag_func('title', "This is Python Class")
p_func = tag_func('p', "Data Academy")
Out[35]:
decorator function¶
- 복잡한 클로져 함수를 간단하게 만듦
In [38]:
def star(func):
def inner(*args, **kwargs):
print("*" * 30)
func(*args, **kwargs)
print("*" * 30)
return inner
# printer라는 함수가 star함수의 파라미터로 넘어감
@star
def printer(msg):
print(msg)
printer("Hello")
In [42]:
number_list[len(number_list)//2 = [6, 75, 79, 41, 38, 77, 1, 30, 69, 83]
In [47]:
number_list.sort()
if len(number_list) % 2 == 0:
median = (number_list[len(number_list)//2] + number_list[len(number_list)//2 - 1]) / 2
else:
median = number_list[len(number_list)//2]
median
Out[47]:
반응형
'Study' 카테고리의 다른 글
파이토치 기본 문법 (0) | 2022.02.24 |
---|---|
파이토치 CNN, RNN 개념과 역전파 (0) | 2022.02.23 |
미국주식 보통주 클래스 A, B의 차이와 의미를 알아보자 (0) | 2022.01.29 |
스팩주? 기업 인수 목적 회사란 무엇인가? (0) | 2022.01.28 |
[해외기업 재무제표] 시가총액, Market Capitalization (0) | 2022.01.27 |
댓글